1
一个触发在表1我有触发1,在表3插入具有触发器3使用扳机2的结果在表。 有没有一种方法在火鸟2.5午餐触发1在表1后才触发2在表2? 也许有些“等待触发器”?火鸟2.5等待来自另一个
一个触发在表1我有触发1,在表3插入具有触发器3使用扳机2的结果在表。 有没有一种方法在火鸟2.5午餐触发1在表1后才触发2在表2? 也许有些“等待触发器”?火鸟2.5等待来自另一个
不,在Firebird 2.5中,您不能指定触发器只在其他触发器后运行。
触发器的执行顺序由触发它们,也就是说,如果你使用
INSERT INTO table2 ...
INSERT INTO table1 ...
那么(ON INSERT
)的table2
的触发之前table1
那些被执行的语句的顺序确定。如果表具有多个给定类型的触发器,那么该命令由触发器声明的POSITION
子句确定。
如果你不能保证INSERT
语句的顺序,那么也许你可以使用数据库触发器作为解决办法 - 建立一个ON TRANSACTION COMMIT
触发,你检查你是在trigger2
设置一个标志。如果标志位于那里,则执行需要在trigger2
中生成的数据的东西。要设置标志,您可以使用RDB$SET_CONTEXT和USER_TRANSACTION
命名空间。像
CREATE TRIGGER trigger2 ACTIVE AFTER INSERT ON table2
AS
BEGIN
RDB$SET_CONTEXT ('USER_TRANSACTION', 'doTrigger1', 1);
END
CREATE TRIGGER trigger1 ACTIVE ON TRANSACTION COMMIT
AS
BEGIN
IF(RDB$GET_CONTEXT ('USER_TRANSACTION', 'doTrigger1') = 1)THEN BEGIN
-- proccess data
END
END
东西见的完整TRIGGER DDL syntax的火鸟语言参考。