oracle存储过程中forall,oracle存储过程--循环中使用exception

过程中经常会使用循环来遍历表,取出数据做处理,写回去或者写到其他表中。这个时候,我们会遇到一些问题,当然这里是遇到异常。在循环中如果遇到异常,直接结束循环,回滚事物,是没有错的。有的时候,我们会希望,循环中,只有会产生异常的那些数据才不会回写(写日志什么的),正常数据,还是正常的处理写入,不受异常的数据影响。这个时候就需要加入异常处理。

Error(72,7): PLS-00103: Encountered the symbol "EXCEPTION" when expecting one of the following: ( begin case declare end exit for goto if loop mod null pragma raise return select update while with << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge

Error(79,3): PLS-00103: Encountered the symbol "EXCEPTION" when expecting one of the following: end not pragma final instantiable order overriding static member constructor map

Error(84,33): PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: end not pragma final instantiable order overriding static member constructor map

必须承认,我也不知道这个错误提示是什么意思,baidu的内容,瞄了几个,都是格式问题(如:elsif 写成 else if)。好好理了一下代码的逻辑,没弄懂,when other then 下面到底几行算它的内部代码块,dbms这行肯定是,rollback,当然也是,那在后面写个commit,当然也算内部代码块了,那commit就没用了。但是commit写在loop后面,那遇到exception,前面循环的数据也回滚了(还没有提交),这样也打不到效果。在CSDN上看到有人问差不多的问题,看到一个回答,就试了试把exception写在begin 和end的代码块中。 当然,问题就是这么解决的(尴尬的试,我似乎并不想知道为什么会这样,因为没用去找) 这样写,每循环一次提交一下,遇到异常只回滚一次循环的数据。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值