SQLPLUS - 在插入错误时更新值的触发器

时间:2014-05-25 09:51:07

标签: sql triggers

我正在尝试创建一个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

这将允许触发器进行编译,但该值不会更新,直到将新值插入表中,依此类推。

如何让这个触发器工作?附:我知道触发器可能不是最好的方法。

1 个答案:

答案 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;
/