0

我正在创建一个像这样的 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”它拒绝回滚到某个保存点,但是当我只使用“回滚”时它可以工作?有人可以帮我解释一下为什么会这样吗?

4

0 回答 0