【发布时间】:2021-11-02 07:56:07
【问题描述】:
我有一个触发器,它调用存储过程(在表上插入之后)来执行许多 DML 语句。我的存储过程有一个提交,所以我的触发器失败了。经过一番研究,我在触发器中添加了 pragma automatic_transaction,现在它没有抱怨了。但我不确定这将如何影响我的触发器的行为。这是正确的方法还是只是让它工作的“黑客”?
这是我正在尝试做的伪代码
proc1 (input) - program logic then insert into table X, commit.
proc2 (input) - program logic then insert into table Y, commit.
trigger on table A AFTER INSERT
declare pragma autonomous_transaction
if :new value = 1 then
proc1 (:new value)
else
proc2 (:new value)
end if
【问题讨论】:
-
请发布整个代码。
-
您可能不应该在触发器的上下文中明确地
commit,以允许包含事务控制行为,或者继续使用autonomous行为。以下内容可能有助于确定您可能需要哪种方法:docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/… ... 请记住,自主行为可能会导致它与包含事务之间的死锁。 -
你需要检查自治事务的机制in the docs并决定。