【问题标题】:PLSQL rollback changes made by procedure A from procedure BPLSQL 回滚过程 A 从过程 B 所做的更改
【发布时间】:2016-08-04 09:49:20
【问题描述】:

我有 pls/ql 过程 procedure_test(),这个过程改变了表中的一些数据,这个过程没有任何提交或回滚。

所以我从另一个程序调用这个过程 - procedure_test2() 在从 procedure_test2() 调用 procedure_test() 之后,procedure_test() 中的所有更改都已提交。那么,如何从procedure_test2() 回滚procedure_test() 所做的更改?

谢谢。

【问题讨论】:

  • 请添加两个程序的代码;或者最好是演示问题的最小版本。 procedure_test 是只做纯 DML,还是做任何可能隐含提交的事情?

标签: oracle plsql transactions rollback


【解决方案1】:

您可以使用savepoint,例如在 procedure_test2() 中的代码就像

...
savepoint bforetest;
procedure_test(); 
rollback to savepoint bforetest; //this actually cancels whatever _test did.
...

【讨论】:

  • 我试过这个,但是我有这个错误:ORA-01086:保存点'BFORETEST'从未在此会话中建立或无效。
  • 这可能意味着 procedure_test() 执行提交或回滚。因为每当执行回滚或提交时,保存点都会被删除。请记住,提交也可以是隐式的。
猜你喜欢
  • 1970-01-01
  • 2014-10-13
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多