获取 Oracle 更新触发器中更新记录的 ID pl/sql
Get ID of updated record in Oracle update trigger pl/sql
我有一名员工 table 并试图将员工 table 的 update/delete 操作记录到日志 table 中。
Emp table:
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,那么我会收到多行提取错误,我相信这是真的。如何找回身份证?请帮我理一下逻辑
您已经在 :NEW 伪行中有了值,其中包含更新发生后存在的值。看起来你想做类似的事情:
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;
祝你好运。
我有一名员工 table 并试图将员工 table 的 update/delete 操作记录到日志 table 中。 Emp table:
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,那么我会收到多行提取错误,我相信这是真的。如何找回身份证?请帮我理一下逻辑
您已经在 :NEW 伪行中有了值,其中包含更新发生后存在的值。看起来你想做类似的事情:
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;
祝你好运。