トリガーの起動順序
タイミングの異なる2つ以上のトリガーを同じ表の同じ文に定義する場合、それらのトリガーは次の順序で起動されます。
-
すべての
BEFORE
STATEMENT
トリガー -
すべての
BEFORE
EACH
ROW
トリガー -
すべての
AFTER
EACH
ROW
トリガー -
すべての
AFTER
STATEMENT
トリガー
場合によっては、異なるタイミングを持つ個々のトリガー群を、必要な順序でアクションを明示的にコード化した単一の複合トリガーに置き換えます。複合トリガーの詳細は、「複合DMLトリガー」を参照してください。
タイミングが同じ2つ以上のトリガーを作成する際に、起動順序が重要である場合は、FOLLOWS
句またはPRECEDES
句(「FOLLOWS | PRECEDES」を参照)を使用してその起動順序を制御できます。
1つの表に複数の複合トリガーを作成する場合、次のことに注意してください。
-
すべての
BEFORE
STATEMENT
セクションはBEFORE
STATEMENT
のタイミングで、BEFORE
EACH
ROW
セクションはBEFORE
EACH
ROW
のタイミングで、というように実行されます。トリガーの実行順序が
FOLLOWS
句で指定された場合、FOLLOWS
句によって複合トリガーのセクションの実行順序が決定されます。FOLLOWS
がすべてのトリガーではなく一部のトリガーに指定されている場合、トリガーの実行順序はFOLLOWS
句によって関係付けられたトリガーについてのみ保証されます。 -
すべての
AFTER
STATEMENT
セクションはAFTER
STATEMENT
のタイミングで、AFTER
EACH
ROW
セクションはAFTER
EACH
ROW
のタイミングで、というように実行されます。トリガーの実行順序が
PRECEDES
句で指定された場合、PRECEDES
句によって複合トリガーのセクションの実行順序が決定されます。PRECEDES
がすべてのトリガーではなく一部のトリガーに指定されている場合、トリガーの実行順序はPRECEDES
句によって関係付けられたトリガーについてのみ保証されます。ノート:
PRECEDES
は、reverse crosseditionトリガーにのみ適用されます。詳細は、『Oracle Database開発ガイド』を参照してください。
複合トリガーの起動は、単純なトリガーの起動でインターリーブされる可能性があります。
あるトリガーによって他のトリガーが起動される場合、それらのトリガーはカスケードしていると言われます。データベースでは、一度に最大32個のトリガーをカスケードできます。カスケードするトリガーの数を制限する場合、トリガーを起動するたびにカーソルがオープンされるため、OPEN_CURSORS
初期化パラメータ(『Oracle Databaseリファレンス』を参照)を使用します。