In DB2 ist es möglich, nur einen einzigen Auslöser für beiden Updates haben und einfügen?

StackOverflow https://stackoverflow.com/questions/1011673

  •  06-07-2019
  •  | 
  •  

Frage

Ich muss den Auslöser erstellen (s), die die Prüfung meiner Tabelle halten. Der Auslöser soll sowohl Insert und Update auszuführen.

zur Zeit ich bin mit zwei Trigger

Ein für Einfügen :

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

Ein weiteres für update

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

Aber der Punkt ist, wenn es möglich, einen einzelnen Auslöser, in DB2 zu erstellen, für die Aufgabe zu tun? [Sofern beide Trigger das Gleiche tun.]

War es hilfreich?

Lösung

Sorry, DB2 bietet keine Möglichkeit, Update und Insert zu kombinieren Trigger zusammen.

Andere Tipps

Versuchen Sie, diese

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

Ja, es ist möglich.

können Sie weitere Informationen finden Sie hier

 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

Diese Funktion ist nun in der Version von DB2 10.x Es ist schon verfügbar Sinus 9.7.x

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top