Oracle TRIGGER とは
- Oracleにはトリガーという機能がある。MYSQLにもある。
- ある条件に合致した操作が行われた場合に、実行されるオブジェクト。
- 実際のシステムでトリガー使いすぎると、仕組みが複雑になる。
- TRIGGERとか何してるって資料ないし、嫌気が指しそう。
とりあえず、念の為トリガーの作成基本構文
CREATE OR REPLACE TRIGGER トリガー名
{BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE}
ON テーブル名 (FOR EACH ROW)
BEGIN
処理を記述(PL/SQL)
END;
えー、なんとなくわかりますね。
次から確認に入ります~。
1.Oracleにトリガーがあるか確認する。
''' SQL で確認ができる。へぇ。
SELECT * FROM USER_TRIGGERS;
[結果]
''' 色々出てきたので省略w
- USER_TRIGGERS だけで検索を行うと、ダラダラ~と内容がでてきてわかりにくかったため、項目別でSELECTしてみる。
''' 必要な項目だけ、確認する。
SELECT TRIGGER_NAME, TABLE_NAME, STATUS FROM USER_TRIGGERS;
[結果]
TRIGGER_NAME TABLE_NAME STATUS
------------------------------ ------------------------------ --------
TRM_XXX TM_XXX ENABLED
TRM_CCC TM_CCC ENABLED
TRM_AAA TM_AAA ENABLED
''' STATUS 列が `ENABLED` なら有効。`DISABLED ` なら無効。
''' つまり上記のトリガーは全て動いていることがわかる。
2.指定したトリガーのソースを確認する
- ソースを確認するのが一番で、何したいのかだいたい想像つく
SELECT TRIGGER_BODY FROM ALL_TRIGGERS WHERE TRIGGER_NAME = 'TRM_XXX';
[結果]
TRIGGER_BODY
--------------------------------------------------------------------------------
BEGIN
:NEW.N_YMD := TO_NUMBER(TO_CHAR(SYSDATE, 'YYYYMMDD'));
END TRM_XXX
''' トリガーのソースを確認するには`ALL_TRIGGERS`を使い、
''' `TRIGGER_BODY ` でソースのみ確認ができる。
3.トリガーはいつ実行されるのか確認する。
''' `TRIGGER_TYPE` はトリガーを起動するタイミング
''' `TRIGGERING_EVENT` はトリガーを起動するデータベース・イベント
SELECT TRIGGER_NAME, TRIGGER_TYPE, TRIGGERING_EVENT FROM USER_TRIGGERS;
[結果]
TRIGGER_NAME TRIGGER_TYPE TRIGGERING_EVENT
------------------------------ ---------------- -----------------
TRM_XXX BEFORE EACH ROW INSERT OR UPDATE
TRM_CCC BEFORE EACH ROW INSERT OR UPDATE
TRM_AAA BEFORE EACH ROW INSERT OR UPDATE
''' DBインサートとアップデート前に行うってことがわかった。
確認した結果。
- 2 と 3 を確認しただけで、何をしているかは想像ついた。
- 指定したDBをなにかしたら更新するタイミングでSYSDATEを入れるよ。というトリガーがたくさん仕込まれていることがわかった。
- うん。終了です。