我想创建一个触发器“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;
请告知
答案 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触发器是了解更多内容的好地方。