DB2에서는 업데이트와 삽입 모두에 대한 단일 트리거 만 가질 수 있습니까?
문제
내 테이블의 감사를 유지하는 트리거를 만들어야합니다. 트리거는 삽입 및 업데이트에서 모두 실행해야합니다.
현재 나는 두 개의 트리거가 있습니다
삽입 용:
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
예, 가능합니다. 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
.
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를 사용할 수 있습니다
제휴하지 않습니다 StackOverflow