SQL触发器显示工资变化

时间:2016-05-22 04:01:59

标签: sql oracle plsql triggers

我正在尝试在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的绑定,当我尝试运行更新以查看它是否有效时,它指出触发器失败。那么我如何错误地使用旧标签和新标签呢?或者这不是问题

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。

  1. 您需要创建一个后触发器而不是之前的触发器。

  2. 您正在尝试编写执行操作的触发器     插入,删除或更新。所以你应该做条件检查     (如插入,删除或更新)条款。

  3. 此外,删除时,没有新值,只有旧值 值。

  4. 我会改变你的触发器如下..

    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;