【问题标题】: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 谢谢你的解释。

标签: sql oracle plsql triggers transactions


【解决方案1】:

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

【讨论】:

  • 触发器工作正常。我只是要求澄清AUTONOMOUS_TRANSACTION
猜你喜欢
  • 1970-01-01
  • 2014-07-09
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2012-03-23
  • 2011-09-30
  • 1970-01-01
相关资源
最近更新 更多