Встроенные исключительные ситуации

В этом учебном материале вы узнаете, как использовать встроенные исключительные ситуации в Oracle/PLSQL c синтаксисом и примерами.

Описание

Встроенные исключительные ситуации это исключительные ситуации, которые имеют определенные имена в PL/SQL. Они определены в стандартном пакете в PL/SQL и не могут быть определены программистом.
Oracle имеет стандартный набор встроенных исключительных ситуаций:

Исключительные ситуации ORACLEОшибки OracleПояснения
DUP_VAL_ON_INDEXORA-00001Вы пытались выполнить операторы insert или update поля, изменение значения которого нарушит ограничение уникальности поля.
TIMEOUT_ON_RESOURCEORA-00051Возбуждается при возникновении таймаута, когда ORACLE ожидает ресурса.
TRANSACTION_BACKED_OUTORA-00061Откат удаленной части транзакции.
INVALID_CURSORORA-01001Вы пытаетесь сослаться на курсор, который еще не существует. Это могло произойти потому, что вы выполняете выборку (fetch) курсора, который был закрыт (close) или не был открыт (open).
NOT_LOGGED_ONORA-01012Вы пытаетесь выполнить вызов в Oracle, не подключившись к Oracle.
LOGIN_DENIEDORA-01017Вы пытаетесь войти в Oracle с неверными имя пользователя / пароль.
NO_DATA_FOUNDORA-01403Вы пробовали один из следующих вариантов:

  1. 1. Вы выполнили SELECT INTO и запрос не вернул ни одной строки.
  2. 2. Вы ссылаетесь на неинициализированную строку в таблице.
  3. 3. Вы читаете после конца файла пакета UTL_FILE.
TOO_MANY_ROWSORA-01422Вы пытались выполнить SELECT INTO и запрос вернул более одной строки.
ZERO_DIVIDEORA-01476Вы пытались поделить число на ноль.
INVALID_NUMBERORA-01722Вы пытаетесь выполнить оператор SQL который пытается преобразовать строку в число.
STORAGE_ERRORORA-06500Вы исчерпали доступную память или память повреждена.
PROGRAM_ERRORORA-06501Это общее сообщение Обратитесь в службу поддержки Oracle, возбуждается по причине обнаружения внутренней ошибки.
VALUE_ERRORORA-06502Вы пытались выполнить операцию и была ошибка преобразования, усечения, или ограничения числовых или символьных данных.
CURSOR_ALREADY_OPENORA-06511Вы попытались открыть курсор, который уже открыт.

Синтаксис

Рассмотри синтаксис встроенных исключительных ситуаций в процедуре и функции.

Синтаксис для процедуры

CREATE [OR REPLACE] PROCEDURE procedure_name
[ (parameter [,parameter]) ]
IS
[declaration_section]BEGIN
executable_sectionEXCEPTION
WHEN exception_name1 THEN
[statements]

WHEN exception_name2 THEN
[statements]

WHEN exception_name_n THEN
[statements]

WHEN OTHERS THEN
[statements]

END [procedure_name];

Синтаксис для функции

CREATE [OR REPLACE] FUNCTION function_name
[ (parameter [,parameter]) ]
RETURN return_datatype
IS | AS
[declaration_section]BEGIN
executable_sectionEXCEPTION
WHEN exception_name1 THEN
[statements]

WHEN exception_name2 THEN
[statements]

WHEN exception_name_n THEN
[statements]

WHEN OTHERS THEN
[statements]

END [function_name];

Пример использования исключительных ситуаций в процедуре.

В этом примере, мы перехватываем исключительную ситуацию DUP_VAL_ON_INDEX. Мы можем также использовать WHEN OTHERS, чтобы перехватить остальные исключительные ситуации.