有此疑问主要基于两个原因:
原因1、存储过程可能存在互相调用的可能,如果每一个存储过程都做了事务处理,则子过程的commit和rollback会影响父过程的执行;当然可以设定子过程为自治的,这样子过程不影响父过程,但是将遇到第二个原因。
原因2、客户端如(PB)以及中间件调用存储过程,如果在客户端或中间件做了事务处理,则又希望外面的事务能影响存储过程的事务,如果存储过程commit了,即使外面的事务因出错而回滚,但存储过程也不能rollback了。
所以,很疑问,到底存储过程中该不该做事务处理?或者怎么做才是好的处理方案?事务处理做在存储过程中好还是做在客户端或中间件中好?
请各位指教!谢谢
原因1、存储过程可能存在互相调用的可能,如果每一个存储过程都做了事务处理,则子过程的commit和rollback会影响父过程的执行;当然可以设定子过程为自治的,这样子过程不影响父过程,但是将遇到第二个原因。
原因2、客户端如(PB)以及中间件调用存储过程,如果在客户端或中间件做了事务处理,则又希望外面的事务能影响存储过程的事务,如果存储过程commit了,即使外面的事务因出错而回滚,但存储过程也不能rollback了。
所以,很疑问,到底存储过程中该不该做事务处理?或者怎么做才是好的处理方案?事务处理做在存储过程中好还是做在客户端或中间件中好?
请各位指教!谢谢
解决方案 »
- 求求大哥大姐了,救命啊.出现Inside isClusterMode,bCluster is :fal
- oracle全文索引stoplist的中文怎么添加?
- 关于Oracle有没有这样的函数
- 高手帮忙看看这段代码,是oracle8.0的存储过程,编译不过去。
- 数据库中的表容易被锁掉,请问怎么解锁?急!!~~
- 大家能否在这留下个QQ或MAIL啊,方便交流!
- 在package的procedure如何实现动态排序
- 数据库简单问题(在线等待)
- 如何将oracle 客户端 sql/net打包进安装程序(如installshield)
- 这句SQL怎么写?好难啊!
- 存储过程内进行排序并插入新表问题
- Oracle Cache表问题
========================================================================
qiuyang_wang(小数点) :
我现在在编写一个Oracle存储过程规范,既然是规范,当然是希望是通用的、明确的而不是模棱两可的。在这个新的规范中,我尚有两个问题未得到圆满解决。一个就是上面提出的事务处理,希望事务处理能适应大多数应用需要;另一个问题就是错误处理问题,通常我们用一个o_RetVal返回值来表明存储过程的执行情况,但现在发现,这个参数真正用到的地方并不多,有人强烈建议去掉该参数,如果是这样,必须做相应的错误处理,捕获错误并处理。到底哪种方法好呢?又该怎么处理呢?我还未能定下来。现在一并提出来,请各位前辈指点迷津。