DeepEdit!

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

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

Объявление исключительных ситуаций

Исключительные ситуации описываются в разделе объявлений блока, инициируются в выполняемом разделе, а обрабатываются в разделе иск­лючительных ситуаций. Существуют два вида исключительных ситуаций: определяемые пользователем и стандартные (предопределенные).
Исключительные ситуации, определяемые пользователем
Исключительная ситуация, определяемая пользователем, обозначает та­кую ошибку, которая описывается программистом, причем совсем не обя­зательно, чтобы эта ошибка была ошибкой Oracle, — она может быть, например, ошибкой данных. Стандартные же исключительные ситуации соответствуют типичным ошибкам SQL и PL/SQL.
Исключительные ситуации, определяемые пользователем, описыва­ются в разделе объявлений блока PL/SQL. Как и переменные, исключи­тельные ситуации имеют собственный тип (EXCEPTION) и область действия. Например:
e_TooManyStudents — это идентификатор, который виден во всем блоке. Область действия исключительной ситуации определяется так же, как и область действия переменной или курсора, описанного в том же разделе объявлений. О правилах, определяющих область действия и область ви­димости идентификаторов PL/SQL, рассказывается в главе 3.
Стандартные        ситуации
В Oracle существует ряд исключительных ситуаций, которые соответству­ют типичным ошибкам Oracle. Как и стандартные типы данных (NUMBER, VARCHAR2 и т.д.), идентификаторы таких исключительных ситуаций описаны в модуле STANDARD (см. главу 3). Эти идентификато­ры доступны программе, и их не надо описывать в разделе объявлений, в отличие от исключительных ситуаций, определяемых пользователем. Стандартные исключительные ситуации приведены в таблице 7.2.

Внимание
Можно также связать определяемые пользователем исключительные ситуации с ошибками Oracle (см. ниже раздел "Прагма EXCEPTION_INIT").
Краткое описание некоторых стандартных исключительных ситуаций приводится ниже. Более подробно об этих ошибках рассказывается в ру­ководстве "PL/SQL User's Guide".
INVALID_CURSOR Эта ошибка возникает при выполнении над курсором запрещенной операции — например, при попытке закрыть уже закрытый курсор. Попытка открыть уже открытый курсор вызывает исключитель­ную ситуацию CURSOR_ALREADY_OPEN.
NO_DATA_FOUND Эта исключительная ситуация устанавливается в двух случаях. Первый случай: оператор SELECT...INTO не возвращает ни одной строки. Если этот оператор возвращает более одной строки, гене­рируется исключительная ситуация TOO_MANY_ROWS. Второй случай:
попытка обращения к элементу индексной таблицы PL/SQL, которому
не присвоено значение. Ниже приводится анонимный блок, в котором устанавливается исключительная ситуация NO_DATA_FOUND:
Дополнительная информация об индексных таблицах PL/SQL содер­жится в главе 8.
1NVALID_NUMBER Эта исключительная ситуация устанавливается в
SQL-операторах при неудачной попытке преобразования строки симво-
лов в число. В процедурных операторах генерируется другая исключите-
льная ситуация — VALUE_ERROR. Например, в следующем операторе
возникает        так как     не является числом:
STORAGE_ERROR и PROGRAM_ERROR Это внутренние исключитель­ные ситуации. Причиной их возникновения является либо нехватка памя­ти (STORAGE_ERROR), либо внутренняя ошибка PL/SQL (PROGRAM. ERROR). Чаще всего внутренние ошибки вызываются сбоями в работе системы PL/SQL, и о них следует сообщать в службу технической поддер­жки корпорации Oracle (Oracle Technical Support).
VALUE_ERROR Эта исключительная ситуация устанавливается при по­явлении арифметической ошибки, ошибки преобразования, усечения или ограничения в процедурном операторе. Если же ошибка возникает в SQL-операторе, то генерируется исключительная ситуация INVALID_ NUMBER. Причиной ошибки VALUE_ERROR может быть операция при­сваивания, оператор SELECT...INTO, параметры RETURNING INTO опе­ратора SQL или параметры подпрограммы. Все эти ситуации являются результатом присвоения значения переменной PL/SQL. Если возникает проблема с этим присваиванием, устанавливается
~| До Огас1е8 г текстом сообщения об ошибке VALUE_ERROR было "Numeric §J or Value Error" (ошибочное число или значение). Однако в Огас1е8г сооб­щение об ошибке будет указывать причину ошибки. Приведем примеры:
ROWTYPE_MISMATCH Эта исключительная ситуация устанавливается
при несоответствии типов базовой курсорной переменной и курсорной
переменной PL/SQL. Например, ROWTYPE_MISMATCH возникает при несоответствии фактического и формального типов, которые возвраща­ются процедурой, использующей в качестве аргумента курсорную пере­менную. О курсорных переменных подробно рассказывается в главе 6, там же приводится пример этой исключительной ситуации.

 









jAntivirus