PRAGMA AUTONOMOUS_TRANSACTION
Posted
技术标签:
【中文标题】PRAGMA AUTONOMOUS_TRANSACTION【英文标题】: 【发布时间】:2019-02-25 18:50:39 【问题描述】:我有带有 的过程 A 来记录主程序的活动。
现在我在程序 B 中调用此程序 A 以在程序 B 中记录活动过程。如果程序 A 中发生任何错误,它也会使程序 B 失败。如何避免主程序 B 失败。
【问题讨论】:
事务和异常是两个不同的东西,如果这就是你要问的。运行时错误不会仅仅因为您将某些内容声明为pragma autonomous transaction
而停止。
【参考方案1】:
该日志记录过程做了什么导致它可能失败?不是纯INSERT
+COMMIT
吗?
无论如何:最简单(也可能是最糟糕的)选项是使用异常处理部分,例如
your_procedure is
begin
do something;
exception
when others then null;
end;
如果您真的不在乎是否发生了不好的,那也没关系,但是 - 目的是什么?你认为你做了什么,Oracle 没有抱怨,程序什么也不做,你不知道发生了什么。
因此,您最好确保此“记录”过程不会失败。
【讨论】:
我的问题是 PRAGMA AUTONOMOUS_TRANSACTION 独立于主程序,那么如果程序 A 失败,为什么主程序会受到影响。 它是独立的,在这种过程中发出的提交或回滚不会影响主事务。这并不意味着自治事务过程中引发的错误将被默默地忽略。没有。以上是关于PRAGMA AUTONOMOUS_TRANSACTION的主要内容,如果未能解决你的问题,请参考以下文章