1

テーブル 1には、テーブル 3に挿入するトリガー 1と、テーブル 2のトリガー 2の結果を使用するトリガー 3があります。Firebird 2.5で、表 2のトリガー 2の後でのみ、表 1のトリガー 1をランチする方法はありますか? たぶん、いくつかの「トリガーを待つ」?

4

1 に答える 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 に答える