В этом учебном материале вы узнаете, как использовать встроенные исключительные ситуации в Oracle/PLSQL c синтаксисом и примерами.
Описание
Встроенные исключительные ситуации это исключительные ситуации, которые имеют определенные имена в PL/SQL. Они определены в стандартном пакете в PL/SQL и не могут быть определены программистом.
Oracle имеет стандартный набор встроенных исключительных ситуаций:
Исключительные ситуации ORACLE | Ошибки Oracle | Пояснения |
---|---|---|
DUP_VAL_ON_INDEX | ORA-00001 | Вы пытались выполнить операторы insert или update поля, изменение значения которого нарушит ограничение уникальности поля. |
TIMEOUT_ON_RESOURCE | ORA-00051 | Возбуждается при возникновении таймаута, когда ORACLE ожидает ресурса. |
TRANSACTION_BACKED_OUT | ORA-00061 | Откат удаленной части транзакции. |
INVALID_CURSOR | ORA-01001 | Вы пытаетесь сослаться на курсор, который еще не существует. Это могло произойти потому, что вы выполняете выборку (fetch) курсора, который был закрыт (close) или не был открыт (open). |
NOT_LOGGED_ON | ORA-01012 | Вы пытаетесь выполнить вызов в Oracle, не подключившись к Oracle. |
LOGIN_DENIED | ORA-01017 | Вы пытаетесь войти в Oracle с неверными имя пользователя / пароль. |
NO_DATA_FOUND | ORA-01403 | Вы пробовали один из следующих вариантов:
|
TOO_MANY_ROWS | ORA-01422 | Вы пытались выполнить SELECT INTO и запрос вернул более одной строки. |
ZERO_DIVIDE | ORA-01476 | Вы пытались поделить число на ноль. |
INVALID_NUMBER | ORA-01722 | Вы пытаетесь выполнить оператор SQL который пытается преобразовать строку в число. |
STORAGE_ERROR | ORA-06500 | Вы исчерпали доступную память или память повреждена. |
PROGRAM_ERROR | ORA-06501 | Это общее сообщение Обратитесь в службу поддержки Oracle, возбуждается по причине обнаружения внутренней ошибки. |
VALUE_ERROR | ORA-06502 | Вы пытались выполнить операцию и была ошибка преобразования, усечения, или ограничения числовых или символьных данных. |
CURSOR_ALREADY_OPEN | ORA-06511 | Вы попытались открыть курсор, который уже открыт. |
Синтаксис
Рассмотри синтаксис встроенных исключительных ситуаций в процедуре и функции.
Синтаксис для процедуры
[ (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];
Синтаксис для функции
[ (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];
Пример использования исключительных ситуаций в процедуре.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
CREATE OR REPLACE PROCEDURE add_new_supplier (supplier_id_in IN NUMBER, supplier_name_in IN VARCHAR2) IS BEGIN INSERT INTO suppliers (supplier_id, supplier_name ) VALUES ( supplier_id_in, supplier_name_in ); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN raise_application_error (-20001,'Вы пытались вставить дубликат supplier_id.'); WHEN OTHERS THEN raise_application_error (-20002,'Произошла ошибка при вставке supplier.'); END; |
В этом примере, мы перехватываем исключительную ситуацию DUP_VAL_ON_INDEX. Мы можем также использовать WHEN OTHERS, чтобы перехватить остальные исключительные ситуации.