在Oracle更新触发器pl / sql

时间:2018-07-08 17:04:18

标签: oracle plsql triggers database-trigger

我有一个雇员表,并尝试将雇员表的更新/删除操作记录到日志表中。 Emp表:

ID NAME ReviewerID
1   A   101
2   B   102
3   C   101

如果我执行更新操作,那么我想检索该特定记录的ID

DECLARE 
P_ID INTEGER:
....
WHEN UPDATING('ReviewerID') THEN
SELECT ID INTO P_ID 
FROM EMP 
WHERE ReviewerID = :new.ReviewerID
.....

如果我将B的ReviewerID更新为101,那么我会得到一个多行读取的错误,我相信这是事实。如何获取ID?请按逻辑帮助我

1 个答案:

答案 0 :(得分:0)

您已经在:NEW伪行中包含值,其中包含UPDATE发生后出现的值。看来您想执行以下操作:

CREATE OR REPLACE TRIGGER EMPLOYEE_UPDATE_TRIGGER
  AFTER UPDATE OF EMPLOYEE
  FOR EACH ROW
BEGIN
  IF :OLD.ReviewerID <> :NEW.ReviewerID THEN
    INSERT INTO EMPLOYEE_LOG
      (ID, ReviewerID)
    VALUES
      (:NEW.ID, :NEW.ReviewerID);
  END IF;
END EMPLOYEE_UPDATE_TRIGGER;

好运。