Размер шрифта
-
+

Язык PL/SQL - стр. 23

Таблица 2. Предопределенные исключения PL/SQL.


Исключение

Описание исключения (номер ошибки)


INVALID_CURSOR

ссылка на несуществующий курсор (ORA-01001)


NO_DATA_FOUND

не найдены данные командой

SELECT INTO (ORA-01403)


DUP_VAL_ON_INDEX

попытка вставить в столбец с ограничением

на уникальность значение-дубликат (ORA-00001)


TOO_MANY_ROWS

команда SELECT INTO возвращает

более одной строки (ORA-01422)


VALUE_ERROR

арифметическая ошибка, ошибка преобразования

или усечения чисел и строк (ORA-06502)


INVALID_NUMBER

ошибка преобразования строки в число (ORA-01722)


PROGRAM_ERROR

внутренняя ошибка PL/SQL (ORA-06501)


ZERO_DIVIDE

попытка деления на ноль (ORA-01476)


Схема обработки исключений в Java

В языке программирования Java при описании работы с исключениями используется бейсбольная терминология. При возникновении исключения бросается (throws) объект-исключение. Этот объект как бейсбольный мяч пролетает через исходный код, появившись сначала в том методе, где произошло исключение. В одном или нескольких местах кода объект-исключение пытаются (try) поймать (catch) и обработать. Причем исключение можно обработать в одном месте кода полностью, а можно обработать исключение частично, выбросить его из обработчика снова, поймать в другом месте и обрабатывать дальше.

Приведем пример кода на Java с попыткой поймать два исключения – связанные с ошибками арифметических вычислений и нарушением правил работы с массивами (выход индекса массива за границы диапазона):

try{

}

catch(ArithmeticException ae){

System.out.println("From Arithm.Exc. catch: "+ae);

}

catch(ArraylndexOutOfBoundsException arre){

System.out.println("From Array.Exc.catch: "+arre);

}

}

Схема обработки исключений в PL/SQL

Работа с исключениями в PL/SQL очень похожа на то, как это делается в Java.

Для обработки исключений предназначен последний раздел блока PL/SQL – раздел обработки исключений. Этот последний раздел блока после ключевого слова EXCEPTION похож на то, что в Java указывается после ключевого слова catch. Перед обсуждением правил обработки исключений приведем небольшой пример с комментариями в коде.

DECLARE

a INTEGER;

BEGIN


a := 1;

a := 2/0; – бросается предопределенное исключение ZERO_DIVIDE

a := 3; – над этой командой пролетает, команда не выполняется

a := 4; – над этой командой тоже пролетает, команда не выполняется


– управление передается в раздел обработки исключений,

– начинаем «примерку» обработчиков

EXCEPTION


– не подходит по имени ловимого исключения к прилетевшему ZERO_DIVIDE

WHEN PROGRAM_ERROR THEN

DBMS_OUTPUT.PUT_LINE('Программная ошибка');

– оба имени ловимых исключений не подходят к прилетевшему ZERO_DIVIDE

Страница 23