2009-06-18 4 views
4

테이블을 감사 할 트리거를 만들어야합니다. 트리거는 삽입 및 업데이트시 모두 실행되어야합니다. 갱신DB2에서는 업데이트와 삽입 모두에 대해 하나의 트리거 만있을 수 있습니까?

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(.. ,, ..); 

또 다른를하지만 것이 가능를 만들 경우 요점은, : 현재

내가 삽입 두 개의 트리거

하나를 데 작업을 수행하기위한 DB2의 단일 트리거? [모두 제공하면 트리거가 동일한 작업을 수행합니다.]

+0

그것은 바로 어느 다른 데이터베이스에서 가능하지? 내가 틀렸다면 나를 바로 잡아라. –

+0

@RashmiPandit : 적어도 Oracle 및 Postgres에서 수행 할 수 있습니다. –

답변

-1

죄송합니다. DB2는 업데이트 및 삽입 트리거를 함께 결합하는 방법을 제공하지 않습니다.

0

이 기능은 이제 DB2 10.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

예 것이 가능 시도 가능한 사인 9.7.x이었다. 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 
관련 문제