ORACLE/TRIGGER編

オラクルちょこっとリファレンス

HOME > TRIGGER編

TRIGGER(トリガー)

トリガーとは、ある条件に合致した操作が行われた場合に、実行されるオブジェクトです。例えばあるテーブルが更新されたら、他のテーブルに挿入を行うというような感じです。
ただ、実際のシステムでトリガーを使いすぎると仕組みが複雑になり、分かりづらくなってしまうので、多用は避けたほうが無難です。

トリガーの作成

トリガーの作成には、CREATE TRIGGER句を使用します。

CREATE TRIGGER構文
CREATE [ OR REPLACE ] TRIGGER トリガー名
  { BEFORE | AFTER | INSTEAD OF }
  { INSERT | UPDATE [OF 列名,...] | DELETE }
    [OR {INSERT | UPDATE [OF 列名,...] | DELETE }]
    [... ]
      ON テーブル名
    [ FOR EACH ROW ]
    [ WHEN 条件式 ]
      BEGIN
        処理内容
    END
;
パラメータ 説明
OR REPLACE 同じ名前のトリガーがあった場合は上書きする指定。
BEFORE |
AFTER |
INSTEAD OF
トリガーを起動させるタイミング。
before: データが操作される前にトリガーを起動する
after: データが操作された後にトリガーを起動する
instead of: データが操作されるSQLが実行された時、そのSQLは実行せずにトリガーだけを起動する
FOR EACH ROW 複数の行のデータが操作された場合、この指定があると、各行ごとにトリガーを起動する
この指定が無いと複数行のデータが操作されるSQLが発行されても1回しかトリガーは起動されない。
TRRIGERの作成例文
--(例)test_tblの挿入・変更・削除件数をcnt_tblに記録するトリガー CREATE OR REPLACE TRIGGER test_trg before insert or update or delete on test_tbl for each row BEGIN if inserting then update cnt_tbl set i_cnt = i_cnt + 1; elsif updating then update cnt_tbl set u_cnt = u_cnt + 1; else update cnt_tbl set d_cnt = d_cnt + 1; end if; END; /

この例だと、test_tblテーブルにINSERTかUPDATEかDELETEが実行されると起動するトリガーが作成されます。
BEGIN~ENDの間でINSERT、UPDATE、それ以外の場合で行う処理を変えています。

CREATE TRIGGERの実行には以下の権限が必要です。

  • 自スキーマに作成する場合:「CREATE TRIGGER」システム権限
  • 他スキーマに作成する場合:「CREATE ANY TRIGGER」システム権限

トリガーを有効/無効にする

トリガーの有効/無効の設定には ALTER TRIGGER句を使用します。

ALTER TRIGGER構文 (トリガーの有効/無効)
ALTER TRIGGER <トリガー名> {ENABLE | DISABLE};

TRIGGERを無効にする例文
--(例)トリガー(トリガー名:test_trg)を無効にする。 ALTER TRIGGER test_trg DISABLE;

トリガーの削除

トリガーの削除には DROP TRIGGER句を使用します。

DROP TRIGGER構文
DROP TRIGGER <トリガー名>;

TRIGGERの削除例文
--(例)トリガー(トリガー名:test_trg)を削除する。 DROP TRIGGER test_trg;

ToTop