PLSQL触发器编译错误
PLSQL触发器创建时出现编译错误,无法更新表PLSQL触发器编译错误,plsql,triggers,oracle10g,plsqldeveloper,Plsql,Triggers,Oracle10g,Plsqldeveloper,PLSQL触发器创建时出现编译错误,无法更新表 create or replace trigger dis_salary_changes before update of Salary on system.emp for each row when (new.Eno in('E1','E2','E3','E4','E5')) declare sal_diff integer; begin sal_diff := :new.salary - :old.salary;
create or replace trigger dis_salary_changes
before update of Salary on system.emp
for each row
when (new.Eno in('E1','E2','E3','E4','E5'))
declare
sal_diff integer;
begin
sal_diff := :new.salary - :old.salary;
dbms_output.put_line('Old Salary= '|| :old.Salary);
dbms_output.put_line('New Salary= '|| :new.Salary);
dbms_output.put_line('Salary difference= '|| :sal_diff);
end;
/
除了一些事情外,触发器或多或少是正常的 首先,不要在业务中使用
SYSTEM
schema。创建另一个用户并在那里测试您的技能(或者,使用一个预安装的用户,例如SCOTT
或HR
,如果他们在那里的话)。如果继续在系统中工作
,可能会使数据库出错
在代码中,唯一的语法错误出现在最后一个DBMS\u输出中。PUT\u LINE
call-删除SAL\u DIFF
变量前面的冒号:
CREATE OR REPLACE TRIGGER dis_salary_changes
BEFORE UPDATE OF Salary
ON SYSTEM.emp
FOR EACH ROW
WHEN (new.Eno IN ('E1',
'E2',
'E3',
'E4',
'E5'))
DECLARE
sal_diff INTEGER;
BEGIN
sal_diff := :new.salary - :old.salary;
DBMS_OUTPUT.put_line ('Old Salary= ' || :old.Salary);
DBMS_OUTPUT.put_line ('New Salary= ' || :new.Salary);
DBMS_OUTPUT.put_line ('Salary difference= ' || :sal_diff);
^
remove it
END;
/
此外,一旦计算出差异,就不会对这些信息进行任何处理。这是故意的吗
create or replace trigger dis_SAL_changes
before update of SAL on emp
for each row
when (new.EMPNO in('E1','E2','E3','E4','E5'))
declare
SAL integer;
begin
SAL := :new.SAL - :old.SAL;
dbms_output.put_line('Old SAL= '|| :old.SAL);
dbms_output.put_line('New SAL= '|| :new.SAL);
dbms_output.put_line('SAL difference= '|| :SAL);
end;
触发已编译的DISU SAL_更改使用
显示错误
或查询用户错误
视图以查看对象的实际错误。请阅读-总结是,这不是解决志愿者问题的理想方法,可能会对获得答案产生反作用。请不要将此添加到您的问题中。