使用自治事务触发
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】:我建议您使用存储过程来执行此操作。此外,触发器中不允许使用任何事务控制语句。 ROLLBACK、COMMIT 和 SAVEPOINT 不能使用。
【讨论】:
触发器工作正常。我只是要求澄清AUTONOMOUS_TRANSACTION
以上是关于使用自治事务触发的主要内容,如果未能解决你的问题,请参考以下文章