Основы проектирования реляционных баз данных



Обработка исключительных ситуаций в PL/SQL


Исключительная ситуация - это возникновение предопределенного и описанного события в системе. Например, ошибки преобразования типов переменных или переполнения при делении на нуль. Пример некоторых предопределенных ситуаций, распознаваемых в PL/SQL, приведен в таблице 12.1 ниже. Для получения полного списка таких ситуаций следует обратиться к документации по PL/SQL.

Таблица 12.1. Описание некоторых исключительных ситуаций

LOGIN_DENIDНеуспешное подключение к серверу
NOT_LOGGED_ONПопытка выполнить действие без подключения к серверу
INVALID_CURSORСсылка на недопустимый курсор или недопустимая операция с курсором
NO_DATA_FOUNDНе найдены данные, соответствующие команде SELECT INTO
DUP_VAL_ON_INDEXПопытка вставить дубликат значения в колонку с ограничением на уникальное значение
VALUE_ERRORАрифметическая ошибка, ошибка усечения или преобразования

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

Рассмотрим пример обработки исключительной ситуации в программе, когда кодировщик пропустил оператор открытия курсора.

Пример

DECLARE X1 T01_A1%TYPE; X2 T01_A2%TYPE; X3 T01_A3%TYPE; CURSOR CUR1 IS SELECT * FRON T01; BEGIN WHILE CUR1%FOUND LOOP FETCH CUR1 INTO X1,X2,X3; DBMS_OUTPUT.PUT_LINE (X1||' '||X2||' '||X3); END LOOP EXCEPTION WHEN INVALID_CURSOR THEN DBMS_OUTPUT.PUT_LINE ('ОШИБКА. НЕ ОТКРЫТ КУРСОР1'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE ('НЕИЗВЕСТНАЯ ОШИБКА.'); END; /

Для обработки ситуаций, не входящих в перечень стандартных, можно использовать специальный обработчик PL/SQL OTHERS или описать пользовательскую исключительную ситуацию и запрограммировать ее обработку. Ключевое слово OTHERS блока EXCEPTION определяет универсальный алгоритм обработки исключительных ситуаций, не входящий в список стандартных.

Исключительная ситуация, задаваемая пользователем, должна быть описана в блоке DECLARE, как Имя исключительной ситуации EXCEPTION. После обнаружения исключительной ситуации в программе PL/SQL она должна быть сгенерирована указанием ключевого слова и имени исключительной ситуации - RAISE Имя исключительной ситуации. В блоке EXCEPTION должен быть предусмотрен код для ее обработки.

Например,

DECLARE … User_ecx EXCEPTION; … BEGIN IF x1 < 0 THEN RAISE User_exc; END IF; … EXCEPTION WHEN User_exc THEN DBMS_OUTPUT.PUT_LINE (ПОЛЬЗОВАТЕЛЬСКАЯ ИСКЛЮЧИТЕЛЬНАЯ СИТУАЦИЯ.'); …

В этом разделе мы рассмотрели основные конструкции расширения SQL в Oracle PL/SQL. Для более глубокого изучения этого языка следует обратиться к списку литературы или документации.




Содержание  Назад  Вперед