我在写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。。。。。
我用数据反补的方式给手动回滚了。。。谢谢你的热心。