Триггер более или менее в порядке, кроме нескольких вещей.
Прежде всего, не используйте схему 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;
/
Кроме того, когда вы вычисляете разницу, вы ничего не делаете с этой информацией.Это намеренно?