テーブル 1には、テーブル 3に挿入するトリガー 1と、テーブル 2のトリガー 2の結果を使用するトリガー 3があります。Firebird 2.5で、表 2のトリガー 2の後でのみ、表 1のトリガー 1をランチする方法はありますか? たぶん、いくつかの「トリガーを待つ」?
質問する
810 次
1 に答える
1
いいえ、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 構文については、Firebirds 言語リファレンスを参照してください。
于 2013-05-01T11:54:04.257 に答える