有此疑问主要基于两个原因:
原因1、存储过程可能存在互相调用的可能,如果每一个存储过程都做了事务处理,则子过程的commit和rollback会影响父过程的执行;当然可以设定子过程为自治的,这样子过程不影响父过程,但是将遇到第二个原因。
原因2、客户端如(PB)以及中间件调用存储过程,如果在客户端或中间件做了事务处理,则又希望外面的事务能影响存储过程的事务,如果存储过程commit了,即使外面的事务因出错而回滚,但存储过程也不能rollback了。
所以,很疑问,到底存储过程中该不该做事务处理?或者怎么做才是好的处理方案?事务处理做在存储过程中好还是做在客户端或中间件中好?
请各位指教!谢谢

解决方案 »

  1.   

    感谢两位的回答对于一个独立的存储过程,我想,是应该做相应的事务处理的,但对于与其它存储过程和客户端程序配合使用的,则没有必要做事务处理,就像你些程序一样,……
    ========================================================================
    qiuyang_wang(小数点) :
    我现在在编写一个Oracle存储过程规范,既然是规范,当然是希望是通用的、明确的而不是模棱两可的。在这个新的规范中,我尚有两个问题未得到圆满解决。一个就是上面提出的事务处理,希望事务处理能适应大多数应用需要;另一个问题就是错误处理问题,通常我们用一个o_RetVal返回值来表明存储过程的执行情况,但现在发现,这个参数真正用到的地方并不多,有人强烈建议去掉该参数,如果是这样,必须做相应的错误处理,捕获错误并处理。到底哪种方法好呢?又该怎么处理呢?我还未能定下来。现在一并提出来,请各位前辈指点迷津。