|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Обработка исключительных ситуацийВ программах PL/SQL подпрограммы обработки ошибок представляют собой обработчики исключительных ситуаций. Распознав ошибку, программа PL/SQL устанавливает (raises) исключительную ситуацию и передает управление соответствующей подпрограмме – обработчику исключительной ситуации, которая не является частью тела программы. Исключительная ситуация представляет собой поименованное условие возникновения ошибки. В PL/SQL имеется множество предопределенных исключительных ситуаций, соответствующих наиболее часто встречающимся в ORACLE ошибкам. Например: ─ Программа распознает исключительную ситуацию NO_DATA_FOUND в случае, если в результирующем множестве оператора select into нет строк, и исключительную ситуацию TOO_MANY_ROWS, когда в результирующем множестве этого оператора более одной строки. ─ Программа распознает исключительную ситуацию DUP_VAL_ON_INDEX (повторяющееся значение в индексе) в случае, если оператор insert или update дублирует ключевое значение, уже находящееся в таблице. В PL/SQL включено около 20 исключительных ситуаций. Когда в программе встречается предопределенная исключительная ситуация, управление программой передаётся соответствующему обработчику исключительных ситуаций, если таковой имеется. Исключительные ситуации, определяемые пользователями, можно объявлять в разделе объявлений программы. Однако для того, чтобы затем установить такую исключительную ситуацию, необходимо выполнить её явную проверку. При желании можно назначить индивидуальный номер ошибки ORACLE исключительной ситуации, определяемой пользователем. При вызове программой указанной ошибки ORACLE автоматически устанавливается исключительная ситуация, определяемая пользователем. Нижеследующий пример демонстрирует использование заранее предопределенных и определяемых пользователем исключительных ситуаций, а также соответствующих обработчиков:
declare invalid_part exception; insufficient_privileges exception; err_num integer; err_msg varchar2 (2000); part_num integer; begin select … into … from …; update parts set unit_price=20.00 where id=6; if SQL %NOTFOUND then raise invalid_part; end if; exception when no_data_found then raise_application_error (-20001, ‘No rows found’); when too_many_rows then raise_application_error (-20002, ‘Too many rows found’); when invalid_part then raise_application_error (-20003, ’Invalid part ID’); when insufficient_privileges then raise_application_error (-20004,’Insufficient privileges to update table’); when others then err_num:=SQLCODE; err_msg:=SUBSTR(SQLERRM, 1, 100); raise_application_error (-20000, err_num || ‘ ‘||err_msg); … В данном примере: ─ для возвращения в вызывающую среду номера и сообщения об ошибке, определяемой пользователем, применяется процедура raise_application_error (установить ошибку приложения). Номера сообщений об ошибках, определяемых пользователем, должны лежать в диапазоне от -20000 до -20999; ─ для создания общего обработчика всех исключительных ситуаций, для которых не определены собственные обработчики, применяется синтаксис when others; ─ для возвращение номера и сообщения о самой последней ошибке ORACLE применяются специальные функции SQLCODE и SQLERRM.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |