есть ошибки компиляции.
Какую среду вы используете для создания триггера? Большинство клиентов должны сообщить вам сообщение об ошибке, как только вы запустите оператор, хотя некоторые действительно усложняют его, чем кажется разумным.
Однако мы всегда можем найти ошибки компиляции, запросив словарь данных:
select * from user_errors
where name = 'T1';
Единственная очевидная ошибка, которую я могу заметить в вашем коде, это:
where deptno := old.deptno;
:=
- оператор присваивания PL / SQL. Тест на равенство просто =
. Кроме того, пространство имен old
обозначается двоеточием. Таким образом, ваше предложение WHERE должно быть
where deptno = :old.deptno
Также это неправильно:
Raise_application_error(5000, 'cannot delete row');
Raise_application_error()
должен иметь номер в диапазоне, который Oracle выделяет для пользовательских исключений, который составляет от -20999 до -20000. Кстати, все ошибки Oracle отрицательны.
Полагаю, этот триггер является частью домашнего задания, потому что в нем реализована очень плохая практика. Связь между EMP и DEPT должна обеспечиваться внешним ключом в EMP, ссылающимся на DEPT. Подобные триггеры плохо масштабируются и, что крайне важно, не работают в многопользовательской среде.