创建一个触发器,每当工资增加时,该触发器将使通信增加100



我有一个表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;

最新更新