我正在尝试在sql developer中创建一个简单的触发器,以便在更改时显示工资变化
CREATE OR REPLACE TRIGGER salary_changes
BEFORE DELETE OR INSERT OR UPDATE ON FACULTY
FOR EACH ROW
DECLARE
sal_diff NUMBER;
BEGIN
sal_diff := :NEW.F_SALARY - :OLD.F_SALARY;
DBMS_OUTPUT.PUT_LINE('Difference: ' || sal_diff);
END;
当我尝试运行触发器时,它会提示输入NEW和OLD的绑定,当我尝试运行更新以查看它是否有效时,它指出触发器失败。那么我如何错误地使用旧标签和新标签呢?或者这不是问题
答案 0 :(得分:0)
您的代码存在一些问题。
您需要创建一个后触发器而不是之前的触发器。
您正在尝试编写执行操作的触发器 插入,删除或更新。所以你应该做条件检查 (如插入,删除或更新)条款。
此外,删除时,没有新值,只有旧值 值。
我会改变你的触发器如下..
CREATE OR REPLACE TRIGGER salary_changes
AFTER DELETE OR INSERT OR UPDATE ON FACULTY
FOR EACH ROW
DECLARE
sal_diff NUMBER;
BEGIN
If (INSERTING or UPDATING) then
sal_diff := :NEW.F_SALARY - :OLD.F_SALARY;
DBMS_OUTPUT.PUT_LINE('Difference: ' || sal_diff);
END IF;
IF DELETING THEN
DBMS_OUTPUT.PUT_LINE('The deleted value is:' || :OLD.F_SALARY);
END IF;
END;