db2怎样实现事务控制

如题所述

第1个回答  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 条记录已选择。
相似回答