トリガースクリプト
※コピーすると改行が抜ける場合はソースをダブルクリックして強調表示を外してからコピーしてください1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | --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)