db2怎样实现事务控制
2个回答
2013-01-15
展开全部
你是要在 db2 的命令行里面 控制?
还是存储过程里面控制?
如果是命令行里面控制, 需要做如下的操作:
db2 -td@
connect to sample@
db2 => list command options@
命令行处理器选项设置
后端进程等待时间(秒) (DB2BQTIME) = 1
连接至后端的重试次数 (DB2BQTRY) = 60
请求队列等待时间(秒) (DB2RQTIME) = 5
输入队列等待时间(秒) (DB2IQTIME) = 5
命令选项 (DB2OPTIONS) =
选项 描述 当前设置
------ ---------------------------------------- ---------------
-a 显示 SQLCA OFF
-c 自动落实 ON
请注意那个
-c 自动落实 ON
英文版本显示为
-c Auto-Commit ON
也就是默认情况下, 是自动提交的。
使用下面的命令来查看设置:
执行命令: update command options using c off@
db2 => update command options using c off@
DB20000I UPDATE COMMAND OPTIONS 命令成功完成。
再次执行:list command options 查询
db2 => list command options@
命令行处理器选项设置
后端进程等待时间(秒) (DB2BQTIME) = 1
连接至后端的重试次数 (DB2BQTRY) = 60
请求队列等待时间(秒) (DB2RQTIME) = 5
输入队列等待时间(秒) (DB2IQTIME) = 5
命令选项 (DB2OPTIONS) =
选项 描述 当前设置
------ ---------------------------------------- ---------------
-a 显示 SQLCA OFF
-c 自动落实 OFF
...
自动落实(Auto-Commit) 已经被设置为 OFF 了。
这样操作以后, 你就可以在 db2 命令行中, 做 COMMIT 与 ROLLBACK 的处理了。
如果你是要在存储过程里面, 实现事务的话
那么参考下面的例子:
db2 => select * from test_main@
ID VALUE
----------- ----------
1 ONE
2 TWO
2 条记录已选择。
BEGIN
-- 定义 异常处理.
P1: BEGIN ATOMIC
-- 定义错误处理
-- 如果发生错误,结束处理,并回滚前面做的处理。
DECLARE UNDO HANDLER
FOR
SQLEXCEPTION
BEGIN
-- 异常处理
END;
-- 插入2条同样的数据,使主键重复,引发错误后回滚事务.
INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
END P1;
END
@
执行完毕后
db2 => select * from test_main@
ID VALUE
----------- ----------
1 ONE
2 TWO
2 条记录已选择。
还是存储过程里面控制?
如果是命令行里面控制, 需要做如下的操作:
db2 -td@
connect to sample@
db2 => list command options@
命令行处理器选项设置
后端进程等待时间(秒) (DB2BQTIME) = 1
连接至后端的重试次数 (DB2BQTRY) = 60
请求队列等待时间(秒) (DB2RQTIME) = 5
输入队列等待时间(秒) (DB2IQTIME) = 5
命令选项 (DB2OPTIONS) =
选项 描述 当前设置
------ ---------------------------------------- ---------------
-a 显示 SQLCA OFF
-c 自动落实 ON
请注意那个
-c 自动落实 ON
英文版本显示为
-c Auto-Commit ON
也就是默认情况下, 是自动提交的。
使用下面的命令来查看设置:
执行命令: update command options using c off@
db2 => update command options using c off@
DB20000I UPDATE COMMAND OPTIONS 命令成功完成。
再次执行:list command options 查询
db2 => list command options@
命令行处理器选项设置
后端进程等待时间(秒) (DB2BQTIME) = 1
连接至后端的重试次数 (DB2BQTRY) = 60
请求队列等待时间(秒) (DB2RQTIME) = 5
输入队列等待时间(秒) (DB2IQTIME) = 5
命令选项 (DB2OPTIONS) =
选项 描述 当前设置
------ ---------------------------------------- ---------------
-a 显示 SQLCA OFF
-c 自动落实 OFF
...
自动落实(Auto-Commit) 已经被设置为 OFF 了。
这样操作以后, 你就可以在 db2 命令行中, 做 COMMIT 与 ROLLBACK 的处理了。
如果你是要在存储过程里面, 实现事务的话
那么参考下面的例子:
db2 => select * from test_main@
ID VALUE
----------- ----------
1 ONE
2 TWO
2 条记录已选择。
BEGIN
-- 定义 异常处理.
P1: BEGIN ATOMIC
-- 定义错误处理
-- 如果发生错误,结束处理,并回滚前面做的处理。
DECLARE UNDO HANDLER
FOR
SQLEXCEPTION
BEGIN
-- 异常处理
END;
-- 插入2条同样的数据,使主键重复,引发错误后回滚事务.
INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
END P1;
END
@
执行完毕后
db2 => select * from test_main@
ID VALUE
----------- ----------
1 ONE
2 TWO
2 条记录已选择。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道,但数据库基本都差不多的。但我觉得事务控制不应该交给数据库来处理,而应该在业务逻辑处理。
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询