2009-06-18 8 views
4

Je dois créer le (s) déclencheur (s) qui permettra de garder l'audit de ma table. Le trigger est supposé s'exécuter à la fois sur insert et update.Dans DB2, est-il possible d'avoir un seul déclencheur pour la mise à jour et l'insertion?

actuellement j'ai deux déclencheurs

un pour Insérer:

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

Une autre pour la mise à jour

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

Mais le point est, si possible de créer un déclencheur unique, dans DB2, pour faire la tâche? [à condition que both, trigger fasse la même chose.]

+0

Il est impossible dans une autre base de données soit, non? Corrigez-moi si je me trompe. –

+0

@RashmiPandit: Vous pouvez au moins le faire dans Oracle et Postgres –

Répondre

-1

Désolé, DB2 n'offre pas un moyen de combiner les déclencheurs de mise à jour et d'insertion.

0

Cette fonctionnalité est maintenant dans la version DB2 10.x. Il a été disponible 9.7.x sine

+0

Des détails ou un exemple? –

+1

@Nitegreen, vous devriez combiner vos réponses en une seule réponse. – Jess

3

Essayez cette

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

Oui, il est possible. See the documentation of create trigger. Voici une pâte:

trigger-event 

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

Cela vous permettrait de dire:

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 
Questions connexes