TransactionScope和存储过程?

Ami*_*abh 3 oracle ado.net plsql transactions

我有两个PL/SQL存储过程,每个过程处理自己的事务(如果出错,则开始/提交和回滚).来自.Net代码我将这两个SP称为如下所示.

   using (TransactionScope ts = new TransactionScope())
     {
          CallSP1();
          CallSP2().
          ts.SetComplete();
     }
Run Code Online (Sandbox Code Playgroud)

如果我的SP2调用失败,它将回滚CallSP1()所做的更改吗?如果它没有回滚那么这是否意味着更好地从.Net应用程序而不是在存储过程内处理事务?

Vin*_*rat 10

如果第一个存储过程SP1发出提交,那么它已经进行的任何更改都将是永久性的.在这种情况下,如果SP2失败,SP1将进行的更改将不会回滚.

IMO调用应用程序应该是处理事务逻辑的应用程序,即不在PL/SQL过程中发出提交或回滚.让错误传播到调用应用程序,这样PL/SQL引擎将只回滚失败过程而不是整个事务完成的工作.

让调用应用程序决定在出现错误时要做什么(重试,提交半工作?或回滚).

  • +1.没有程序应该提交 - 它应该只保存点/回滚 - 除非它是最终的调用者; 程序中的主要{}. (2认同)