DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Цикл FOR

Oracle поддерживает циклы FOR со счетчиком и с курсором. Для цикла FOR со счетчиком вы указываете начальное и конечное целые значения, а все остальное за вас делает PL/SQL: проходит все значения внутри заданного диапазона и завершает цикл:


Цикл FOR с курсором имеет такую же базовую структуру, только в данном случае вместо указания верхней и нижней границ целочисленного диапазона следует явно задать курсор или использовать оператор
SELECT:

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

Обработка исключений
В языке PL/SQL ошибки любого рода трактуются как исключения - нештатные ситуации для вашей программы. Исключения могут быть следующих видов:
Ошибка, инициированная системой (например, «недостаточно памяти» или «повторение значений в индексе»).
Ошибка, вызванная действиями пользователя.
Предупреждение, выдаваемое пользователю приложением.
PL/SQL перехватывает ошибки и реагирует на них, используя механизм обработчиков исключений. Обработчики исключений позволяют аккуратно отделить код обработки ошибок от исполняемых операторов. Для обработки ошибок используется событийная модель исполнения кода, а не линейная. Другими словами, вне зависимости от того, где было инициировано исключение, оно будет обработано одним и тем же обработчиком исключений в разделе исключений.
При возникновении ошибки в PL/SQL, будь то системная ошибка или ошибка приложения, инициируется исключение. Обработка в исполняемом разделе текущего PL/SQL-блока прекращается, и управление передается в отдельный раздел исключений текущего блока (если такой существует) для обработки исключения. После завершения обработки исключения вернуться в этот блок невозможно. Управление передается в родительский блок (если он существует).
Определение исключений
Для того чтобы исключение могло быть инициировано или обработано, оно должно быть определено. В Oracle предопределены тысячи исключений, при этом большинству из них сопоставлены номера и сообщения. Небольшой части этих тысяч исключений присвоены имена - речь идет о самых часто встречающихся исключениях.
Имена исключениям присваиваются в пакете STANDARD (один из двух встроенных по умолчанию пакетов PL/SQL), а также в других встроенных пакетах, таких как UTL_FILE и DBMS_SQL. Для определения исключений, таких как NO_DATA_FOUND, Oracle использует точно такой же код, который вы будете использовать для определения или объявления собственных исключений. Определять собственные исключения вы можете двумя разными способами, которые будут описаны в последующих разделах.
Вы можете объявить собственное исключение, указав в разделе объявлений имя исключения, которое вы хотите инициировать в программе, а затем ключевое слово EXCEPTION:
Имена исключений имеют такой же формат, что и имена перемен- ных1, но ссылаться на них можно только двумя способами:
• В предложениях WHEN в разделе исключений (для обработки инициированного исключения), например:
• В операторе RAISE в разделе исполнения программы (для инициирования исключения), например:
Инициирование исключений
Исключение в вашем приложении может быть инициировано тремя способами:
Oracle может инициировать сообщение, обнаружив ошибку.
Вы можете инициировать исключение при помощи оператора RAISE.
Вы можете инициировать исключение при помощи встроенной процедуры RAISE_APPLICATION_ERROR.
Мы уже знаем, как инициирует исключения Oracle. Теперь рассмотрим различные механизмы инициирования исключений программистом.
Оператор RAISE
Поддерживаемый Oracle оператор RAISE позволяет программисту инициировать именованные исключения. Вы можете инициировать как системное, так и собственное исключение. Оператор RAISE может иметь одну из трех форм:

Первая форма (без указания имени пакета) может использоваться для инициирования исключения, определенного в текущем блоке (или во внешнем блоке, содержащем текущий), или для инициирования системного исключения, определенного в пакете STANDARD.
Вторая форма требует указания имени пакета. Если исключение было объявлено внутри пакета (не пакета STANDARD), а инициируете вы его вне этого пакета, то следует указать ссылку на пакет в операторе RAISE.
Третья форма оператора RAISE не требует указания имени исключения, но может использоваться только внутри предложения WHEN в разделе исключений. Используйте эту форму для повторного инициирования
В оригинале - имена логических переменных. Мы полагаем, что имена формируются аналогично именам любых, не только логических, переменных.
исключения из обработчика исключений (другими словами, для передачи исключения дальше, во внешний блок).
Процедура RAISE_APPLICATION_ERROR
В Oracle имеется процедура RAISE_APPLICATION_ERROR (она определена в используемом по умолчанию пакете DBMS_STANDARD) для инициирования ошибок, специфичных для конкретного приложения, информация о которых должна передаваться в среду исполнения программы.
Заголовок процедуры в пакете DBMS_STANDARD выглядит следующим образом:

где num - это номер ошибки в диапазоне между -20999 и -20000 (только представьте: все остальные отрицательные целые числа Oracle использует для собственных исключений!); msg - это сообщение об ошибке, длина которого не должна превышать 2 Кб (любой текст, выходящий за рамки этого ограничения, будет проигнорирован); а keeperrorstack указывает на то, хотите ли вы добавить ошибку к уже содержащимся в стеке ошибкам (TRUE) или же заменить ею уже имеющиеся ошибки (значение по умолчанию - FALSE).
 









jAntivirus