PLSQL触发器编译错误
PLSQL trigger compilation error
PLSQL 触发器创建时出现编译错误,我无法更新 table。
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
架构用于您的 业务 。创建另一个用户并在那里测试您的技能(或者,使用预安装的其中一个,例如 SCOTT
或 HR
,如果它们在那里)。如果您继续在 SYSTEM
.
中工作,您可能会搞砸数据库
根据您的代码,唯一的语法错误出现在最后一个 DBMS_OUTPUT.PUT_LINE
调用中 - 删除 SAL_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;
TRIGGER DIS_SAL_CHANGES 已编译
PLSQL 触发器创建时出现编译错误,我无法更新 table。
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
架构用于您的 业务 。创建另一个用户并在那里测试您的技能(或者,使用预安装的其中一个,例如 SCOTT
或 HR
,如果它们在那里)。如果您继续在 SYSTEM
.
根据您的代码,唯一的语法错误出现在最后一个 DBMS_OUTPUT.PUT_LINE
调用中 - 删除 SAL_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;
TRIGGER DIS_SAL_CHANGES 已编译