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

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

  関連記事

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

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

oracle
[Oracle]インストールに失敗する原因と対処方法

Oracleインストールエラー時の確認事項 OracleのデータベースやクライアントをWindowsへインストール中に インストーラが途中で落ちたり、エラーが発 …

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

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

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

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

db
[Database]データベースのバージョン/エディションを確認する方法

OracleとSQLServerのバージョン/エディションを確認 Oracle  SELECT * FROM V$VERSION SQLServer SELEC …

sqlserer
[SQL Server]再帰SQLで集計する

WITH(共通テーブル式)を使って集計する WITH句とは 共通テーブル式 (CTE) は、単一の SELECT、INSERT、UPDATE、DELETE、CR …

oracle
[Oracle]WEBサイトやWEB APIをOracleから呼び出す方法

WEBリクエストを送信してレスポンスを表示する OracleからWEBサイトやWEB APIなどのネットワークサービスを呼び出すには、UTL_HTTPパッケージ …

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

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

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

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

sqlserer
[SQL Server]除算時の注意点

SQLServerで除算結果が小数になる場合 たとえば、1100グラムをキロに換算する場合は「1100 / 1000」で計算すれば「1.1kg」と求められるが …