使用HR数据库的TRIGGERS

时间:2015-08-21 15:05:44

标签: sql oracle plsql triggers

我想创建一个触发器“Salary_Not_Decrease”,以确保在更新表Employee期间不会降低员工的工资。

请告知如何开始创建此类触发器。

我写了以下代码但不确定

CREATE OR REPLACE TRIGGER Salary_Not_Decrease
BEFORE INSERT OR UPDATE
ON employees
FOR EACH ROW 
BEGIN 
if :new.salary < :old.salary then 
     RAISE_APPLICATION_ERROR(-20001,'Salary should not be decreased ') ;
end if; 
END;

请告知

1 个答案:

答案 0 :(得分:2)

您的问题表明您希望防止减薪。当没有工资减少时,你不能防止工资减少,所以把它作为一个插入触发器之前是没有意义的。使它只是一个更新之前的触发器,你也应该按照你应该检查空值的注释中指出的那样去做:

CREATE OR REPLACE TRIGGER Salary_Not_Decrease
BEFORE UPDATE
ON employees
FOR EACH ROW 
BEGIN 
if coalesce(:new.salary,:old.salary-1,0) < nvl(:old.salary,0) then 
     RAISE_APPLICATION_ERROR(-20001,'Salary should not be decreased ') ;
end if; 
END;

仍在阅读Documentation触发器是了解更多内容的好地方。