在存储过程中调用存储过程后, rollback 不起作用

Sandrer 2020-07-24 12:25:06
我在存储过程 sp1 中 insert 了几条记录, 接着调用了存储过程 sp2
然后 sp2 触发了异常, 我在 sp1 中拦截了异常, 调用 rollback 后退出
查询数据发现, 在 sp1 中 insert 的几条数据居然没有 rollback 成功


insert into t1 values(x, y, z);
insert into t2 values(x, y, z);

begin
r := 0;
sp2(p1, p2);
r := 1;
exception
when others then null;
-- 尝试过在这里 rollback, 也没有成功
end;

if r != 1 then
rollback; -- 这里的 rollback 也没有执行
return;
end if;
...全文
590 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sandrer 2020-09-09
  • 打赏
  • 举报
回复
引用 13 楼 AHUA1001 的回复:
确定走到rollback的分支里了吗
话说, 根据作业流程, 如果代码没有进入 rollback 的分支, 那么就代表没有错误发生, 结果就是我不会发现 rollback 执行无效 而我知道 rollback 执行无效, 那么就肯定进入了该分支了对不对.............
AHUA1001 2020-09-09
  • 打赏
  • 举报
回复
确定走到rollback的分支里了吗
Sandrer 2020-07-27
  • 打赏
  • 举报
回复
引用 10 楼 nayi_224 的回复:
随便试试吧


insert into t1 values(x, y, z);
insert into t2 values(x, y, z);

    sp2(p1, p2, r);

if r != 1 then
    rollback; -- 这里的 rollback 也没有执行
    return;
end if;

试过了, 但只要在调用 sp2 之后, 无论在什么地方调用 rollback 都不会成功 但如果在调用 sp2 之前 rollback, 是可以成功的
sxq129601 2020-07-27
  • 打赏
  • 举报
回复
了解下自治事务PRAGMA AUTONOMOUS_TRANSACTION
nayi_224 2020-07-25
  • 打赏
  • 举报
回复
随便试试吧


insert into t1 values(x, y, z);
insert into t2 values(x, y, z);

    sp2(p1, p2, r);

if r != 1 then
    rollback; -- 这里的 rollback 也没有执行
    return;
end if;

riven2011 2020-07-24
  • 打赏
  • 举报
回复
引用 8 楼 Sandrer 的回复:
我的外层可以捕捉到错误,现在重点不是这个错误,而是为什么rollback不工作

你直接debug吧
Sandrer 2020-07-24
  • 打赏
  • 举报
回复
我的外层可以捕捉到错误,现在重点不是这个错误,而是为什么rollback不工作
riven2011 2020-07-24
  • 打赏
  • 举报
回复
建议将sp2的null或者return 改成 raise
riven2011 2020-07-24
  • 打赏
  • 举报
回复

直接退出就无法在外层捕捉异常了,同时r的值1
Sandrer 2020-07-24
  • 打赏
  • 举报
回复
引用 4 楼 riven2011 的回复:
看一下sp2异常怎么处理的
sp2没有处理直接退出了
riven2011 2020-07-24
  • 打赏
  • 举报
回复
看一下sp2异常怎么处理的
Sandrer 2020-07-24
  • 打赏
  • 举报
回复
在sp2里有ddl语句,在执行这个语句时发生的错误
Sandrer 2020-07-24
  • 打赏
  • 举报
回复
引用 1 楼 riven2011 的回复:
when others then rollback;
试了没用
riven2011 2020-07-24
  • 打赏
  • 举报
回复
when others then rollback;

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧