トリガースクリプト
※コピーすると改行が抜ける場合はソースをダブルクリックして強調表示を外してからコピーしてください
--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)

折りたたみ
展開