Я не думаю, что Oracle рассматривает ошибки компиляции при создании процедур как фактические ошибки, скажем так.
Если вы протестируете это с помощью sqlplus
и введете WHENEVER SQLERROR EXIT FAILURE ROLLBACK
, а затем выполните неудачный CREATE OR REPLACE
, вы увидите, что перехватываются только ошибки, сообщенные через стандартное сообщение типа ORA-nnnnn
.Результат create with compliation errors
не воспринимается как ошибка.
Причина в том, что даже если он создан с ошибками компиляции, он все еще создается.
Единственный способ для вас в вашем случае использованияпроверить, успешно ли CREATE OR REPLACE, возможно, следующим образом:
- Выполнить инструкцию CREATE или REPLACE
- Проверить
DBA_OBJECTS
(или ALL_OBJECTS
или USER_OBJECTS
в зависимости от ситуации):
SELECT STATUS
FROM DBA_OBJECTS
WHERE OBJECT_NAME = 'OBject_name'
AND OBJECT_TYPE = 'PACKAGE|PACKAGE BODY|PROCEDURE...'
AND OWNER = 'the_owner'
Если это возвращает VALID
, то оно сработало и скомпилировано, если INVALID
, тогда запрос DBA_ERRORS
:
SELECT *
FROM DBA_ERRORS
WHERE NAME = 'Object_name'
AND TYPE = '....'
AND OWNER = 'the_owner'