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 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办