我正在尝试创建一个SQL触发器,它会在触发器创建之后插入时更新插入表中的所有值。我无法让这个工作。他是我现在的代码:
CREATE OR REPLACE TRIGGER "SALARY"
AFTER INSERT ON "EMP"
FOR EACH ROW
BEGIN
UPDATE "EMP" SET SALARY = SALARY + 5000 WHERE EMP_TYPE = 'MANAGER' AND EMP_ID> 200;
END;
/
'EMP_ID > 200'
部分是为了确保不修改以前的记录。 SQLPLUS正在创建触发器,但是在插入新记录时,我收到表突变错误。
我还尝试了以下查询:
CREATE OR REPLACE TRIGGER "SALARY"
BEFORE INSERT ON "EMP"
FOR EACH ROW
BEGIN
UPDATE "EMP" SET :NEW.SALARY = :NEW.SALARY + 5000 WHERE :NEW.EMP_TYPE = 'MANAGER' AND :NEW.EMP_ID> 200;
END;
/
此触发器无法使用无效的user.table.column错误(ORA-07147)创建。删除第一个':NEW。"从查询中,该行变为:
UPDATE "EMP" SET SALARY = :NEW.SALARY + 5000 WHERE :NEW.EMP_TYPE = 'MANAGER' AND ...etc
这将允许触发器进行编译,但该值不会更新,直到将新值插入表中,依此类推。
如何让这个触发器工作?附:我知道触发器可能不是最好的方法。
答案 0 :(得分:0)
您可以使用new
关键字直接在插入触发器中影响新插入的行:
CREATE OR REPLACE TRIGGER "SALARY"
BEFORE INSERT ON "EMP"
FOR EACH ROW
WHEN (new.emp_type = 'MANAGER')
BEGIN
:new.salary = :new.salary + 5000;
END;
/