【发布时间】: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