В PL/SQL ошибки
при выполнении программы вызывают исключения (exception). Исключения могут
быть системные и определенные пользователем.
Обработка исключения может быть
определена в любой части pl/sql блока.
Когда происходит ошибка вызывается
исключение (командой raise). При этом нормальное
выполнение кода прекращается, контроль над программой переходит к обработчику
исключительной ситуации определенном в блоке с ошибкой.
Системные ошибки вызываются
автоматически, команда raise
для
них не нужна.
Для примера:
declare
d number;
v varchar2 (100);
begin
v
:= 'Нормальное выполнение';
begin ---Начало блока с исключением
d
:= 1 / 0;
exception
when zero_divide
then
v := ('Ошибка. При вычислениях произошло деление
на ноль');
when others
then
begin -- блок обработки
v := ('Ошибка' || sqlcode || ' ' || sqlerrm);
end;
--
end; --окончание и исключения и блока
dbms_output.put_line (v);
end;
В обработке исключений, как в примере, можно воспользоваться стандартными
переменными, содержащие код и описание ошибки SQLCODE,SQLERRM.
Список стандартных исключений
Исключение
|
Код
ошибки
|
Значение SQLCODE
|
ACCESS_INTO_NULL
|
ORA-06530
|
-6530
|
CASE_NOT_FOUND
|
ORA-06592
|
-6592
|
COLLECTION_IS_NULL
|
ORA-06531
|
-6531
|
CURSOR_ALREADY_OPEN
|
ORA-06511
|
-6511
|
DUP_VAL_ON_INDEX
|
ORA-00001
|
-1
|
INVALID_CURSOR
|
ORA-01001
|
-1001
|
INVALID_NUMBER
|
ORA-01722
|
-1722
|
LOGIN_DENIED
|
ORA-01017
|
-1017
|
NO_DATA_FOUND
|
ORA-01403
|
+100
|
NOT_LOGGED_ON
|
ORA-01012
|
-1012
|
PROGRAM_ERROR
|
ORA-06501
|
-6501
|
ROWTYPE_MISMATCH
|
ORA-06504
|
-6504
|
SELF_IS_NULL
|
ORA-30625
|
-30625
|
STORAGE_ERROR
|
ORA-06500
|
-6500
|
SUBSCRIPT_BEYOND_COUNT
|
ORA-06533
|
-6533
|
SUBSCRIPT_OUTSIDE_LIMIT
|
ORA-06532
|
-6532
|
SYS_INVALID_ROWID
|
ORA-01410
|
-1410
|
TIMEOUT_ON_RESOURCE
|
ORA-00051
|
-51
|
TOO_MANY_ROWS
|
ORA-01422
|
-1422
|
VALUE_ERROR
|
ORA-06502
|
-6502
|
ZERO_DIVIDE
|
ORA-01476
|
-1476
|
Кгогда появится вдохновление допишу про определение собственных исключений, вызов и перевызов исключений, переопределение стандартных исключений, перезапуск транзакций при исключениях и другое.
Комментариев нет:
Отправить комментарий