iteye_7064 2009-12-07 10:08
浏览 263
已采纳

请教一个Oracle存储过程问题!

我在写oracle存储过程。oracle 9i的。
结构像这样。

for i in 1..3 loop
begin
insert .... 1
for j in 1..3 loop
insert ... 2
insert ... 3
end loop;
end
exception
when others then
...
end loop;
commit;

在2处发生了异常,会到异常处理那里去处理。现在我想把当前的这个循环continue掉。但是1处的insert还是会执行。而如果我在异常里面写rollback了,会报错,之后的循环就不会执行了。
请问下这里该怎么改,才能实现continue效果,还能保证事务的完整性?

[b]问题补充:[/b]
你的意思是说,如果2处插入时出异常了,那就干脆不插入了。其他地方该怎么执行还怎么执行?

2处出异常了,1处就不插入了。就是说整个外部循环的此个循环无效了。
下一个循环继续插入。。。。
[b]问题补充:[/b]
我的异常处理是在循环里面的啊。。。。

[b]问题补充:[/b]
你的END和EXCEPTION写反了,应该是EXCEPTION在END之前。你这么一写,因为你在外层FOR循环下一行的BEGIN在里层FOR循环结束处就已经有END了,ORACLE在解析的时候,可能直接就把你的这个EXCEPTION当成是和存储过程同级的EXCEPTION。

反过来依然是这个问题。。。。。

找了半天说是oracle bug。。。。。

我用数据反补的方式给手动回滚了。。。谢谢你的热心。

  • 写回答

3条回答 默认 最新

  • 关键词㏄ 2009-12-08 12:50
    关注

    你的END和EXCEPTION写反了,应该是EXCEPTION在END之前。你这么一写,因为你在外层FOR循环下一行的BEGIN在里层FOR循环结束处就已经有END了,ORACLE在解析的时候,可能直接就把你的这个EXCEPTION当成是和存储过程同级的EXCEPTION。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题