我正在创建一个像这样的 DB2 存储过程
create or replace procedure test()
dynamic result sets 1
begin
//declaration of variable goes here
declare continue handler for sqlexception set errstate = sqlstate;
savepoint save1 on rollback retain cursors;
//some transaction
if errstate <> '00000' then
rollback to savepoint save1;
end if
//return errstate as result set
end@
然而,当错误状态由于某种原因不是“00000”时(据说是死锁),我得到的错误状态是 3B001,它代表我创建的保存点不存在或无效
我试图关闭自动提交,但仍然不起作用,此外,据我了解,我的查询将被视为单个事务,因此它不一定会关闭自动提交
它在 CentOS 6.5 上运行的 DB2 ESE 10.5 上
有什么建议吗?
- - -笔记 - - -
我设法通过改变来解决我的问题
rollback to savepoint save1
只是
rollback
这解决了我的问题,但是,我仍然不知道为什么如果我只使用“回滚到保存点 save1”它拒绝回滚到某个保存点,但是当我只使用“回滚”时它可以工作?有人可以帮我解释一下为什么会这样吗?