DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Использование функции RAISE_APPLICATION_ERROR

Для создания собственных сообщений об ошибках, более содержатель­ных, чем именованные исключительные ситуации, пользователи могут применять встроенную функцию RAISE_APPLICATION_ERROR. Сообще­ния об ошибках, определяемых пользователем, передаются из блока в вы­зывающую среду так же, как и сообщения об ошибках Oracle. Синтаксис функции RAISE_APPLI(^TION_ERROR
RAISE_APPLICATION_ERROR( номер_ошибки, сообщение_об_ошибке, [сохранение_ошибки]);
где номер_ошибки — это параметр, лежащий в диапазоне от -20 000 до -20 999, сообщение_об_ошибке - текст, соответствующий данной ошибке, а сохранение_ошибки — логическое значение. Длина параметра сообщение_об_ошибке не должна превышать 512 символов. Логический параметр сохранение_ошибки необязателен. Если он установлен в TRUE, новая ошибка пополнит список ранее ошибок (при наличии этого в случае же FALSE новая ошибка заместит текущий список ошибок.
Для примера рассмотрим процедуру, которая перед регистрацией нового студента        имеется ли для свободное место в учебной группе. Более подробно процедуры рассматриваются в главе 9:
В процедуре Register функция используется в трех случаях. Сначала процедура определяет текущее число сту­дентов, зарегастрированных в группе, при помощи первого оператора SELECT...INTO. Если этот оператор возвращает NO DATA FOUND, то управление программой передается обработчику исключительной ситуации, и RAISE_APPLICATION_ERROR применяется для уведомления пользователя о том, что группа не существует. Если же группа существует, процедура прове­ряет, имеется ли свободное место для нового студента. Если свободного мес­та нет, вновь применяется функция RAISE_APPLICATION_ERROR, чтобы сообщить пользователю об отсутствии свободного места. И, наконец, если свободное место есть, проверяется, не зарегистрирован ли студент в группе, это делается с помощью второго оператора SELECT ... INTO. Если все три проверки проходят успешно, студент вносится в список группы путем обновления таблиц registered_students, students и classes.
Следующий сеанс SQL*Plus демонстрирует поведение процедуры Regis­ter и инициируемые ошибки. Предполагается, что таблицы находятся в своем исходном состоянии (созданы сценарием tables, sql).
Формат выходных данных одинаков — номер ошибки Oracle и связан­ный с ней текст. Отметим, что в обоих случаях выдается сообщение ORA-6512, указывающее строку, которая вызвала ошибку. Поэтому RAISE_ APPLICATION_ERROR может использоваться для возврата условий ошибки пользователю в виде, согласованном с другими ошибками Oracle. Это очень полезно, так как не требуется никакой специальной обработки определенных пользователем ошибок по сравнению со стандартными ошибками.

 









jAntivirus