Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpory_BD.doc
Скачиваний:
57
Добавлен:
26.09.2019
Размер:
254.46 Кб
Скачать

Использование цикла for для работы с курсорами

Как и в других циклах FOR, область видимости переменной - индекса цикла ограничена этим циклом.

Формат цикла FOR для работы с курсорами следующий:

FOR индексцикла IN курсор | операторSELECT LOOP

END LOOP

15. Обработка исключений. Пользовательские исключения. Возбуждение исключений.

Исключительная ситуация – это событие, не приводящие к возникновению непоправимой ошибки, но прерывающее нормальное выполнение программы и вызывающее переход к обработчику исключительной ситуации.

Исключительные ситуации делятся на внутренние и пользовательские. Внутренние исключения возбуждаются неявно (автоматически) системой исполнения; пользовательские исключения возбуждаются явно, посредством предложений RAISE (эти предложения могут также возбуждать предопределенные исключения). Перечислим имена некоторых внутренних исключений и соответствующие им коды ошибок, которые возвращаются системной функцией SQLCODE:

исключения

CURSOR_ALREADY_OPEN Попытка повторного открытия курсора без его предварительного закрытия код ошибки (-6511)

DUP_VAL_ON_INDEX Операция INSERT или UPDATE пытается создать повторяющееся значение в столбце, ограниченном опцией UNIQUE код ошибки (-1)

INVALID_ CURSOR Некорректный курсор (например, попытка закрыть неоткрытый курсор) код ошибки (-1001)

INVALID_NUMBER Невозможно преобразовать строку символов в число в предложении SQL код ошибки (-1722)

LOGIN_DENIED Некорректное имя пользователя или пароль при попытке подключения к ORACLE код ошибки (-1017)

NO_DATA_FOUND Предложение SELECT INTO не возвратило ни одной строки код ошибки (+100)

NOT_LOGGED_ON Не было выполнено подключение к ORACLE код ошибки (-1012)

STORAGE_ERROR Нехватка памяти код ошибки (-6500)

TIMEOUT_ON_RESOURCE Время ожидания ресурса истекло код ошибки (-51)

TRANSACTION_BACKED_OUT Выполнен явный или неявный откат транзакции код ошибки (-61)

VALUE_ERROR Возникла арифметическая ошибка, ошибка преобразования, ошибка усечения или ошибка ограничения. код ошибки (-6502)

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

BEGIN EXCEPTION{ WHEN исключение THENобработчик; } …[ WHEN OTHERS THENобработчик; ]END;

Вместе такие конструкции работают как группа операторов IF..ELSIF..ELSE. Если возникающая исключительная ситуация не соответствует ни одной из упомянутых в разделе EXCEPTION, то сраба­тывает WHEN OTHERS. Рекомендуется всегда использовать OTHERS в конце обработчика исключительных ситуаций, чтобы исключить подъем непредвиденного исключения на более высокий уровень.

Исключения также повышают надежность: вам нет необходимости беспокоиться о проверке ошибки в любой точке, где она может возникнуть.

Разрешается объявлять исключения только в декларативной части блока, подпрограммы или пакета PL/SQL. Для объявления исключения используется следующий синтаксис:

DECLAREимяисключения EXCEPTION;

Однако к исключениям применимы те же правила области видимости, что и к переменным:-нельзя объявлять исключение дважды в одном и том же блоке. Однако можно объявить то же самое исключение в двух различных блоках;-исключения, объявленные в блоке, считаются локальными в этом блоке и глобальными во всех его подблоках;-вы можете переобъявить глобальное исключение в подблоке. Внутренние исключения возбуждаются неявно исполнительной системой, как и те пользовательские исключения, которые ассоциированы с кодами ошибок ORACLE с помощью прагмы EXCEPTION_INIT. Однако остальные пользовательские исключения должны возбуждаться явно, посредством предложений RAISE.

Формат предложения RAISE:

RAISE имяисключения;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]