2009-06-18 6 views
4

テーブルの監査を継続するトリガーを作成する必要があります。トリガは、挿入と更新の両方で実行されるはずです。更新DB2では、更新と挿入の両方に対してただ1つのトリガーを持つことは可能ですか?

CREATE TRIGGER SCH.TRG_TBL1_AFT_U 
    AFTER UPDATE ON SCH.TBL1 
    REFERENCING 
    NEW AS n 
    FOR EACH ROW 
MODE DB2SQL 
INSERT INTO SCH.TBL1_AUDIT 
VALUES(.. ,, ..); 

ため

CREATE TRIGGER SCH.TRG_TBL1_AFT_I 
    AFTER INSERT ON SCH.TBL1 
    REFERENCING 
    NEW AS n 
    FOR EACH ROW 
MODE DB2SQL 
INSERT INTO SCH.TBL1_AUDIT 
VALUES(.. ,, ..); 

別のをしかし、それは可能作成する場合のポイントは、次のとおりです。現在

私は挿入のために2つのトリガー

一つが生じていますタスクを実行するためのDB2の単一トリガー? [両方ともトリガーは同じことをしています。]

+0

それは右、いずれかの他のデータベースにはできませんか?私が間違っているなら、私を訂正してください。 –

+0

@RashmiPandit:少なくともOracleとPostgresで行うことができます –

答えて

-1

申し訳ありませんが、DB2では、更新トリガーと挿入トリガーを組み合わせる方法は提供していません。

0

この機能は、DB2 10.xのバージョンになりました。 それは、正弦9.7.x

+0

詳細や例は? –

+1

@Nitegreen、あなたは答えを一つの答えにまとめるべきです。 – Jess

3

利用されていますはい、それは可能である。この

CREATE or replace TRIGGER PASSENGER_TR01_BEFORE_IUD 
BEFORE 
    DELETE 
OR UPDATE OF FIRST_NAME 
OR INSERT ON PASSENGER 
REFERENCING 
OLD AS oldRow 
NEW AS newRow 
FOR EACH ROW 
WHEN (1=1) 
Begin 
Declare ACTION Char(1) Default ''; 
-- Use Case/When to inquire trigger-event 
Case 
When INSERTING Then 
    Set ACTION='I'; 
When UPDATING Then 
    Set ACTION='U';  
When DELETING Then 
    Set ACTION='D';  
Else 
    Set ACTION='N';  
End Case; 

-- Use If/Then/Else to inquire trigger-event 
If INSERTING Then 
    Set ACTION='I'; 
ElseIf UPDATING Then 
    Set ACTION='U'; 
ElseIf DELETING Then 
    Set ACTION='D'; 
Else 
    Set ACTION='N';  
End If; 
End 
1

を試してみてください。 See the documentation of create trigger

trigger-event 

    .-OR--------------------------------------. 
    V          (4) | 
|----+-INSERT--------------------------+-----+------------------| 
    +-DELETE--------------------------+   
    '-UPDATE--+---------------------+-'   
       |  .-,-----------. |   
       |  V    | |   
       '-OF----column-name-+-' 

あなたが言うことを可能にする:

create trigger blah before insert on blah or update of blahここでペーストがあります。

0

You can find more info here

CREATE OR REPLACE TRIGGER SET_SALARY 
NO CASCADE 
BEFORE UPDATE OR INSERT ON employee 
REFERENCING NEW AS n OLD AS o 
FOR EACH ROW 
WHEN(o.edlevel IS NULL OR n.edlevel > o.edlevel) 
BEGIN 
    -- Give 10% raise to existing employees with new education level. 
IF UPDATING THEN SET n.salary = n.salary * 1.1; 
    -- Give starting salary based on education level. 
ELSEIF INSERTING THEN 
    SET n.salary = CASE n.edlevel WHEN 18 THEN 50000 
    WHEN 16 THEN 40000 
     ELSE 25000 
    END; 
    END IF; 
END 
関連する問題