使用自治事务触发

Posted

技术标签:

【中文标题】使用自治事务触发【英文标题】:Trigger with Autonomous Transaction 【发布时间】:2015-05-24 22:42:06 【问题描述】:

我想知道声明AUTONOMOUS_TRANSACTION 是否意味着规则操作在事件事务INSERT on tab 结束后开始(AKA 触发事务有一个成功的COMMIT)。

我使用的是 Oracle DB 11.2

这里我添加了触发器:

CREATE OR REPLACE TRIGGER rule1
AFTER INSERT ON tab
FOR EACH ROW
DECLARE
    PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    EXECUTE IMMEDIATE ('
            ALTER TABLE vert_strukt
            ADD '||:NEW.name||' VARCHAR2(40) ');
    INSERT INTO resulted (name_unique)
    VALUES (:NEW.name);
    COMMIT;
END;

【问题讨论】:

虽然我可以问很多关于您在这里做什么的问题,但对所提出问题的简单回答是 AUTONOMOUS_TRANSACTION 与时间无关。如this page 所述,它允许单独的事务提交或回滚,而不会影响外部事务。 在触发器中运行 DDL 似乎并不是您一开始就应该做的事情。 @HepC 谢谢你的解释。 【参考方案1】:

我建议您使用存储过程来执行此操作。此外,触发器中不允许使用任何事务控制语句。 ROLLBACKCOMMITSAVEPOINT 不能使用。

【讨论】:

触发器工作正常。我只是要求澄清AUTONOMOUS_TRANSACTION

以上是关于使用自治事务触发的主要内容,如果未能解决你的问题,请参考以下文章

Oracle与SQL自治事务

oracle 触发器自治事务

Oracle自治事务实际用例

ABAP 中的自治事务模拟

自治事务范围和错误引发

自治事务在 Oracle 中有自己的会话吗?