Database

[Oracle]トリガーの実行順序を設定する方法

oracle Database

FOLLOWS句を使用して実行順序を設定する

1つの表に対して同レベル(タイミング)のトリガーを複数作成することはできますが、実行順序は保証されていません。
実行順序に依存するようなトリガーを作成する場合は、FOLLOWS句を使用して実行順序を設定します。

トリガーの作成方法については、過去記事を参照してください。

トリガーの実行順序

タイミングが異なる2つ以上のトリガーを1つの表の作成した場合、トリガーは次の順序で実行されます。

BEFORE STATEMENTトリガー(BEFORE 文トリガー)
BEFORE EACH ROWトリガー (BEFORE 行トリガー)
AFTER  EACH ROWトリガー (AFTER  行トリガー)
AFTER  STATEMENTトリガー(AFTER  文トリガー)

ここに、タイミングの同じBEFORE 行トリガーを追加作成した場合、トリガーはどちらかの順序で実行されます。

BEFORE STATEMENTトリガー(BEFORE 文トリガー)
BEFORE EACH ROWトリガー (BEFORE 行トリガー)
BEFORE EACH ROWトリガー (BEFORE 行トリガー) 追加分
AFTER  EACH ROWトリガー (AFTER  行トリガー)
AFTER  STATEMENTトリガー(AFTER  文トリガー)

または、

BEFORE STATEMENTトリガー(BEFORE 文トリガー)
BEFORE EACH ROWトリガー (BEFORE 行トリガー) 追加分
BEFORE EACH ROWトリガー (BEFORE 行トリガー)
AFTER  EACH ROWトリガー (AFTER  行トリガー)
AFTER  STATEMENTトリガー(AFTER  文トリガー)

FOLLOWS句で実行順序を設定

トリガー作成時にFOLLOWS句を使用すると、指定した既存トリガーの後に起動するトリガーを作成することができます。

CREATE [OR REPLACE] TRIGGER 作成トリガー名
AFTER UPDATE ON 表名
FOR EACH ROW
FOLLOWS 既存トリガー名
タイトルとURLをコピーしました