oracle - TransactionScope 和存储过程?

标签 oracle ado.net transactions plsql

我有两个 PL/SQL 存储过程,每个过程都处理自己的事务(开始/提交和发生错误时的回滚)。从 .Net 代码我调用这两个 SP,如下所示。

   using (TransactionScope ts = new TransactionScope())
     {
          CallSP1();
          CallSP2().
          ts.SetComplete();
     }

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

最佳答案

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

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

让调用应用程序决定在出现错误时该怎么做(重试、提交一半工作?或回滚)。

关于oracle - TransactionScope 和存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2388074/

相关文章:

c# - Base64 字符串抛出无效字符错误

sql-server - Linq to Sql 隔离级别

Mysql InnoDB - 锁定场景

oracle - 使用 'ORA-04063: package body “…”调用时,成功编译的Oracle软件包失败。

mysql - Oracle 进行备份和恢复的命令是什么

java - 将数组从 Java 传递到 Oracle : java. sql.SQLException:无法转换为内部表示:错误

sql - 错误 : ORA-00955: name is already used by an existing object in Oracle Function

c# - SQLDataReader 如何检查空列值?

entity-framework - 多个项目的 ADO.NET 实体连接字符串

hibernate - .hbm 文件可以在 Hibernate 作为 JPA 提供者的 JPA 应用程序中使用吗?