トリガースクリプト

※コピーすると改行が抜ける場合はソースをダブルクリックして強調表示を外してからコピーしてください

--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)
カスタム検索

★ORACLE案件承ります
▼ORACLE掲示板