Oracleのトリガー

表に対して何らかの変更処理が加えられたときに、その変更処理をきっかけとして自動的に実行される処理。


トリガーの作成

CREATE TRIGGER(CREATE OR REPLACE TRIGGER)を使用する。
例)テーブルの変更(データの入力、あるいは変更)が起こった際に、変更日時とデータの番号を更新する。トリガー作成時は最後のスラッシュを忘れずに!

CREATE OR REPLACE TRIGGER alterobjectset
BEFORE INSERT OR UPDATE ON objectset
FOR EACH ROW
BEGIN
    :new.modified_date := sysdate;
    SELECT objectset_sequence.nextval INTO :new.set_id FROM DUAL;
END;
.
/ 



トリガーを調べる

静的データディクショナリALL_TRIGGERS、DBA_TRIGGERS、USER_TRIGGERSを調べる。

ALL_TRIGGERS
ログインしているユーザーが所有するトリガー。
DBA_TRIGGERS
データベース内の全てのトリガー
USER_TRIGGERS
ログインしているユーザーが所有する全てのトリガー。

主要項目一覧
列名説明
OWNERトリガーの所有者
TRIGGER_NAMEトリガーの名前
TRIGGER_TYPEトリガーを起動するタイミング: BEFORE STATEMENT, BEFORE EACH ROW, BEFORE EVENT, AFTER STATEMENT, AFTER EACH ROW, AFTER EVENT
TRIGGERING_EVENTDML, DDL、またはトリガーを起動するデータベース・イベント
TABLE_OWNERトリガーが定義される表の所有者
BASE_OBJECT_TYPEトリガーが定義されているオブジェクト: TABLE, VIEW, SCHEMA, DATABASE
TABLE_NAMEトリガーのオブジェクト型がSCHEMAかDATABASEの場合、この列はNULL。トリガーのオブジェクト型がTABLEかVIEWの場合、この列はトリガーが定義されている表名/ビュー名を示す
COLUMN_NAMEネストした表トリガーの場合、表の列名。それ以外の場合はNULL
WHEN_CLAUSETRIGGER_BODYが実行されるためには、この式がTRUEに評価される必要がある
STATUSトリガーが使用可能かどうか(ENABLEDまたはDISABLED)
DESCRIPTIONトリガーの説明: トリガー作成文の再作成に有効
ACTION_TYPEトリガー本体の実行形式(CALLまたはPL/SQL
TRIGGER_BODY起動時にトリガーが実行する1 つ以上の文

DESC user_triggers;
Name                 Null?    Type
-------------------- -------- ------------------
TRIGGER_NAME                  VARCHAR2(30)
TRIGGER_TYPE                  VARCHAR2(16)
TRIGGERING_EVENT              VARCHAR2(227)
TABLE_OWNER                   VARCHAR2(30)
BASE_OBJECT_TYPE              VARCHAR2(16)
TABLE_NAME                    VARCHAR2(30)
COLUMN_NAME                   VARCHAR2(4000)
REFERENCING_NAMES             VARCHAR2(128)
WHEN_CLAUSE                   VARCHAR2(4000)
STATUS                        VARCHAR2(8)
DESCRIPTION                   VARCHAR2(4000)
ACTION_TYPE                   VARCHAR2(11)
TRIGGER_BODY                  LONG

例)トリガーが実行するソースを表示する。

SELECT trigger_body FROM user_triggers WHERE trigger_name = 'alterobjectset';