Oracle 删除前触发器不会触发
以下触发器已正确创建,并在UPDATE和INSERT语句之前触发。但发出DELETE stmt时,它不会显示任何内容。请帮我确定这里的问题Oracle 删除前触发器不会触发,oracle,plsql,oracle12c,Oracle,Plsql,Oracle12c,以下触发器已正确创建,并在UPDATE和INSERT语句之前触发。但发出DELETE stmt时,它不会显示任何内容。请帮我确定这里的问题 create or replace trigger tr_emp_saldiff BEFORE INSERT OR UPDATE OR DELETE ON emp REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW WHEN (new.emp_no > 0) declare sal_diff numbe
create or replace trigger tr_emp_saldiff
BEFORE INSERT OR UPDATE OR DELETE
ON emp
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
WHEN (new.emp_no > 0)
declare
sal_diff number;
begin
sal_diff := :new.salary - :old.salary;
dbms_output.put(' Old salary: ' || :old.salary);
dbms_output.put(' New salary: ' || :new.salary);
dbms_output.put_line(' Difference ' || sal_diff);
END;
/
UPDATE emp set salary = salary + 500 where dept_no = 10;
Output :
1 row(s) updated.
Old salary: 20500 New salary: 21000 Difference 500
INSERT INTO EMP VALUES(1000,'Alice',15000,'Fiona',30);
Output :
1 row(s) inserted.
Old salary: New salary: 20000 Difference
DELETE FROM emp where emp_name='Jane';
Output :
1 row(s) deleted.
delete语句后不显示任何值
对于DELETE
,new,这不可能是真的。emp_no
则为空
删除该条件或在
DELETE
上使用单独的触发器。(正如所给出的那样,它只对更新
有意义。在插入
或删除
时工资没有变化)是的,当条件不适用于删除
stmt。非常感谢您的投入!我知道触发器仅适用于UPDATE
语句。但由于我是初学者,我只是测试它是否为INSERT
和DELETE
语句提供了正确的新旧值。
WHEN (new.emp_no > 0)