2013-05-01 71 views
1

一个触发在表1我有触发1,在表3插入具有触发器3使用扳机2的结果在表。 有没有一种方法在火鸟2.5午餐触发1表1后才触发2表2? 也许有些“等待触发器”?火鸟2.5等待来自另一个

回答

1

不,在Firebird 2.5中,您不能指定触发器只在其他触发器后运行。

触发器的执行顺序由触发它们,也就是说,如果你使用

INSERT INTO table2 ... 
INSERT INTO table1 ... 

那么(ON INSERT)的table2的触发之前table1那些被执行的语句的顺序确定。如果表具有多个给定类型的触发器,那么该命令由触发器声明的POSITION子句确定。

如果你不能保证INSERT语句的顺序,那么也许你可以使用数据库触发器作为解决办法 - 建立一个ON TRANSACTION COMMIT触发,你检查你是在trigger2设置一个标志。如果标志位于那里,则执行需要在trigger2中生成的数据的东西。要设置标志,您可以使用RDB$SET_CONTEXTUSER_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的火鸟语言参考。