في DB2, هل من الممكن أن يكون واحد فقط الزناد لكل تحديث وإدراج?

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

  •  06-07-2019
  •  | 
  •  

سؤال

لقد خلق الزناد(ق) التي سوف تبقى مراجعة طاولتي.الزناد من المفترض أن ينفذ على كل insert و update.

انا حاليا في وجود اثنين من المشغلات

واحد على إدراج:

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

آخر تحديث

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

ولكن المهم هو ما إذا كان من الممكن إنشاء مشغل واحد ، DB2 للقيام بهذه المهمة ؟ [ المقدمة سواء ، الزناد يفعلون نفس الشيء .]

هل كانت مفيدة؟

المحلول

آسف, DB2 لا تقدم وسيلة للجمع بين التحديث و إدراج مشغلات معا.

نصائح أخرى

جرب هذا

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

نعم كان ذلك ممكنا. راجع وثائق إنشاء الزناد.هنا هو لصق:

trigger-event

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

التي من شأنها أن تتيح لك أن تقول:

create trigger blah before insert on blah or update of blah.

يمكنك أن تجد مزيد من المعلومات هنا

 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

هذه الميزة هو الآن في الإصدار DB2 10.x.إنه تم المتاحة شرط 9.7.x

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top