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的主要内容,如果未能解决你的问题,请参考以下文章

#pragma使用分析

#pragma pack(push) 和#pragma pack(pop) 以及#pragma pack()

第24课 #pragma 使用分析

#pragma

C之 #pragma(二十二)

#pragma pack(push,1)与#pragma pack的区别(转)