Skill Note

平凡なエンジニアがメモ代わりにプログラミング, インフラ, ネットワークを書き綴るブログ

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

      2020/01/09

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 既存トリガー名

Google AdSense PC

Google AdSense PC

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

oracle
[Oracle]Oracle Clientのアンインストール方法

Oracle Clientをレジストリを含め完全に削除することがありましたので、この記事では削除手順を記載します。 削除手順ではレジストリを変更しますので十分注 …

oracle
[Oracle]ジョブをスケジューリングして定期実行する方法

DBMS_SCHEDULERパッケージを使用したジョブスケジューリング Oracleでジョブを定期実行するには、DBMS_SCHEDULERパッケージやDBMS …

oracle
ODP.NETをNuGetからインストールする

ODP.NETのインストール手順 Oracle 12cから公式のODP.NETがNuGetに追加されました。 この記事ではODP.NETをNuGetからインスト …

oracle
Oracle12cでユーザを作成する方法

SQLコマンドを使用したユーザ作成 Oracle12cからマルチテナント・アーキテクチャが採用されており、以前までの手順ではユーザが作成できません。 ここではP …

sqlserer
[SQLServer]形式指定で日付を取得する方法

SQLServerで形式を指定して日付を取得する 日付形式を指定するために、CONVERT関数、または、FORMAT関数を使用します。 CONVERT関数とFO …

oracle
[Oracle]データベースを再構築してOracle Expressのキャラクタセットを変更する

前回の記事でCSALTERを使用したキャラクタセットの変更方法を記載しましたが、サブセットのキャラクタセットからスーパセットへの変更のみ可能でした。 この記事で …

sqlserer
[SQL Server]データを期間別に集計する

SQL Serverで集計表を出力 日付をDATETIME型で管理している場合、CONVERT関数、DATEPART関数を使って、日、週、月、年別の集計結果を出 …

sqlserer
[SQLServer]日付文字列 + 時刻文字列をDATETIME型に変換する方法

SQLServerで日付文字列 + 時刻文字列をDATETIME型に変換する方法 日付と時刻を別のカラムに格納している場合に日時データとして扱いたい場合は CO …

oracle
[Oracle]端数処理、丸めの方法

ORACLEで数値の端数処理、数値丸めをする 数値を四捨五入する場合は、ROUND関数 数値を切り捨てる場合は、TRUNC関数 各関数の第2引数の値で、小数部、 …

sqlserer
[SQL Server]IDENTITYの値を初期化する

ID値の初期化(リセット)方法 IDENTITYプロパティを設定した列のID値を初期化(リセット)する方法を記載します。 現在のID値を確認する ID値を確認す …