OracleTransaction.Rollback() 是否取代存储过程中的提交?

Does the OracleTransaction.Rollback() supercedes commit in stored procedure?

假设我的代码包含从 C# 代码执行的多个存储过程。每个存储过程都有一个提交和一个异常情况下的回滚。异常在这些存储过程中处理,return 处理错误消息。

如果我有一个 OracleTransaction.BeginTransaction() "running",在执行存储过程时在同一连接对象上,c# 代码中的 OracleTransaction.Rollback() 实际上会回滚提交的数据通过先前执行的存储过程。

逻辑如下:

  1. 打开连接
  2. 开始交易
  3. 执行一个存储过程(里面有commit)
  4. 如果一切正常,执行另一个存储过程(提交)。如果不是,则回滚以前的存储过程并完全停止。
  5. 没有错误提交事务。 谢谢。

一个COMMIT结束当前事务,一个新的事务从下一个可执行的SQL语句开始。因此,后续 ROLLBACK 只能撤消自 以来 前一个 COMMIT 所做的更改,但不能撤消 之前所做的更改。