在 pl/sql 中手动排序触发器触发
Posted
技术标签:
【中文标题】在 pl/sql 中手动排序触发器触发【英文标题】:Manually ordering trigger firing in pl/sql 【发布时间】:2014-04-25 02:03:05 【问题描述】:我在表 A 上有表 A 和 4 行级别 Before Insert 触发器。 触发触发的顺序是什么? 是运行时间决定的吗? 我们可以订购触发器触发吗?触发器 2 然后触发器 4 然后触发器 3 然后触发器 1?
【问题讨论】:
@EatAPeach 建议的FOLLOWS
答案是按照您的实际要求进行操作的方法。然而,从应用程序架构的角度来看,几乎可以肯定的是,在插入触发器之前有一个单独的行级更有意义,它调用 4 个单独的过程来执行 4 个触发器本来可以执行的任何操作。在极少数情况下,拥有多个相同类型的触发器是有意义的。
【参考方案1】:
从documentation 开始,所有相同类型的触发器在执行不同类型的触发器之前。如果同一张表上有多个相同类型的触发器,数据库会选择一个任意的、不可预知的顺序。
如果您希望它以明确的顺序执行,您应该使用FOLLOWS 子句。
CREATE OR REPLACE TRIGGER2
BEFORE INSERT
ON TEST_TABLE
FOR EACH ROW
CREATE OR REPLACE TRIGGER4
BEFORE INSERT
ON TEST_TABLE
FOR EACH ROW
FOLLOWS TRIGGER2
CREATE OR REPLACE TRIGGER3
BEFORE INSERT
ON TEST_TABLE
FOR EACH ROW
FOLLOWS TRIGGER4
【讨论】:
请注意,FOLLOWS
仅从 11.1 开始存在。在此之前,没有办法以声明方式强制相同类型的触发器以特定顺序运行。以上是关于在 pl/sql 中手动排序触发器触发的主要内容,如果未能解决你的问题,请参考以下文章