トリガースクリプト

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

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)
★ORACLE案件承ります