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_EVENT | DML, DDL、またはトリガーを起動するデータベース・イベント |
TABLE_OWNER | トリガーが定義される表の所有者 |
BASE_OBJECT_TYPE | トリガーが定義されているオブジェクト: TABLE, VIEW, SCHEMA, DATABASE |
TABLE_NAME | トリガーのオブジェクト型がSCHEMAかDATABASEの場合、この列はNULL。トリガーのオブジェクト型がTABLEかVIEWの場合、この列はトリガーが定義されている表名/ビュー名を示す |
COLUMN_NAME | ネストした表トリガーの場合、表の列名。それ以外の場合はNULL |
WHEN_CLAUSE | TRIGGER_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';