【问题标题】:PLSQL trigger compilation errorPLSQL 触发器编译错误
【发布时间】:2018-05-11 04:00:50
【问题描述】:

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;
        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;
/

【问题讨论】:

标签: plsql triggers oracle10g plsqldeveloper


【解决方案1】:

触发器或多或少没问题,除了几件事。

首先,不要将SYSTEM 架构用于您的业务。创建另一个用户并在那里测试您的技能(或者,使用其中一个预安装的用户,例如 SCOTTHR,如果他们在那里)。如果你继续在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;
/

此外,一旦您计算出差异,您就不会对这些信息做任何事情。是故意的吗?

【讨论】:

    【解决方案2】:
    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 已编译

    【讨论】:

      猜你喜欢
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      相关资源
      最近更新 更多