这是我的导师给我的描述
为“Worker”表创建一个触发器,该触发器将在对“Worker”表执行INSERT、UPDATE或DELETE操作时触发。此触发器将显示旧值和新值之间的工资差异。编写一个块PL/SQL以测试触发器的执行情况,以响应某些数据库操作(DML)语句(DELETE、INSERT或UPDATE)。
这是代码:
create or replace trigger salary_diff
before delete or insert or update on Worker
for each row
when (new.Worker_id > 0 )
declare
sal_diff number;
begin
sal_diff := :new.salary - :old.salary;
dbms_output.put_line('new salary ' || :new.salar)
dbms_output.put_line('old salary ' || :old.salary)
dbms_output.put_line('difference between salary is ' || sal_diff);
end;
1条答案
按热度按时间bq8i3lrv1#
你提到了“大量的错误”,但实际上只有两个:
DBMS_OUTPUT.PUT_LINE
调用后缺少分号):new
值),因此删除when
子句So:sample table:
触发器:
测试:
(when删除,没有“区别”,因为工人不再存在。如果你想看到的差异无论如何,使用
NVL
函数)