トリガースクリプト
※コピーすると改行が抜ける場合はソースをダブルクリックして強調表示を外してからコピーしてください--INSERT行トリガー CREATE OR REPLACE TRIGGER TRG_INSERT AFTER INSERT ON TEST FOR EACH ROW BEGIN INSERT INTO TEST.TEST VALUES(5); END; / --UPDATE行トリガー CREATE OR REPLACE TRIGGER TRG_UPDATE BEFORE INSERT OR UPDATE OF COL1,COL2 ON TEST REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW BEGIN :NEW.COL1 := :NEW.COL1+1; END; / --INSERT、UPDATEの文トリガー CREATE OR REPLACE TRIGGER TRG_INS_UPD BEFORE INSERT OR UPDATE OF COL1 ON TEST REFERENCING OLD AS OLD NEW AS NEW BEGIN INSERT INTO TEST VALUES(10,10); END; / --UPDATEとINSERTで処理を変更する行トリガー CREATE OR REPLACE TRIGGER TRG_CASE AFTER INSERT OR UPDATE OF COL1 ON TEST REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW BEGIN IF INSERTING THEN INSERT INTO TEST VALUES(10,10); ELSIF UPDATING THEN INSERT INTO TEST VALUES(20,20); END IF; END; / --ログオントリガー --(ログオンと同時に日付フォーマットを変更する) CREATE OR REPLACE TRIGGER TEST.TGR_LOGON AFTER LOGON ON DATABASE DECLARE W_SQL VARCHAR2(60); BEGIN --ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS' を実行 W_SQL := 'ALTER SESSION SET NLS_DATE_FORMAT = ''YYYY/MM/DD ' || 'HH24' || CHR(58) || 'MI' || CHR(58) || 'SS'''; EXECUTE IMMEDIATE W_SQL; END; / --INSTEAD OFトリガー --(通常ORA-01779になる処理の更新ロジックを定義する) create table t1 (col1 number); create table t2 (col1 number); create or replace view v_test as (select a.col1 a1, b.col1 b1 from t1 a,t2 b where a.col1=b.col1); CREATE OR REPLACE TRIGGER TRG_INSTEAD INSTEAD OF INSERT ON V_TEST REFERENCING NEW AS N FOR EACH ROW DECLARE ROWCNT NUMBER; BEGIN INSERT INTO T1(COL1) VALUES(:N.A1); INSERT INTO T2(COL1) VALUES(:N.B1); END; / 例) SQL > insert into v_test values(1,2); 1行が作成されました。 SQL > select * from t2; COL1 ---------- 2 SQL > select * from t1; COL1 ---------- 1 --有効化 ALTER TRIGGER <トリガー名> ENABLE; --無効化 ALTER TRIGGER <トリガー名> DISABLE; --削除 DROP TRIGGER <トリガー名>; --関連ディクショナリ SELECT * FROM DBA_TRIGGERS; SELECT * FROM DBA_TRIGGER_COLS;
マニュアル
一覧(10.2)リファレンス 10g リリース2(10.2)
SQL リファレンス 10g リリース2(10.2)