我有一个表emp,它包含empno、ename、sal、comm和其他一些字段。我想触发这样一个触发器,当用户更新工资时,通信字段将增加100。我写了以下代码:
CREATE OR REPLACE TRIGGER trr40
AFTER UPDATE of sal
ON emp
FOR EACH ROW
DECLARE
BEGIN
if :new.sal>:old.sal then
update emp set comm=comm+10;
end if;
END;`
我收到一个错误,说system.emp表正在发生变化!!请帮忙!!
不要将其作为单独的更新语句来发布以避免此错误,因为同一行不能同时进行两次更新。相反,直接在此事务中设置值,并在更新之前而不是之后进行触发器测试。
CREATE OR REPLACE TRIGGER trr40
BEFORE update of sal
ON emp for each row
BEGIN
if :new.sal>:old.sal
then
:new.comm := :old.comm+10;
end if;
END;