Ошибка компиляции триггера PLSQL - PullRequest
0 голосов
/ 11 мая 2018

Триггер 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;
/

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018
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 скомпилировано

0 голосов
/ 11 мая 2018

Триггер более или менее в порядке, кроме нескольких вещей.

Прежде всего, не используйте схему 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;
/

Кроме того, когда вы вычисляете разницу, вы ничего не делаете с этой информацией.Это намеренно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...