Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / L45 / Основы языка PL_SQL.doc
Скачиваний:
61
Добавлен:
16.04.2013
Размер:
120.32 Кб
Скачать

Обработка ошибок (исключений - exception)

Синтаксическая структура блока исключений

DECLARE

объявление переменных;

BEGIN

операторы;

EXCEPTION

WHEN исключение [OR исключение …] THEN

операторы;

[WHEN …]

[WHEN OTHERS THEN

операторы;]

END;

Типов исключений в Oracleопределено очень много (например,NO_DATA_FOUND илиINSERT_FAILURE), но вы можете вводить свои типы в блокеDECLAREиспользуя тип «EXCEPTION».

Пример.

DECLARE

e_end_rows EXCEPTION;

V_oraerr number;

V_oraerrm varchar2(255);

V_sal number;

CURSOR deptl0_enp_cursor IS

SELECT deptno, ename, sal

FROM еmр ORDER BY deptno;

BEGIN

v_sal :=0

FOR emp_record IN deptl0_emp_cursor LOOP

IF emp_record.deptno > 10 THEN raise e_end_rows;

v_sal := v_sal + sal;

END LOOP;

EXCEPTION

WHEN e_end_rowsTHEN

DBMS_OUTPUT.PUT_LINE('Dept 10 Salaries: ' ||

TO_CHAR(v_sal));

WHEN NO_DATA_FOUNDTHEN

DBMS_OUTPUT.PUT_LINE('No Employees Found') ;

WHEN OTHERSTHEN

v_oraerr := SQLCODE;

v_oraerrm := SQLERRM;

DBMS_OUTPUT.PUT_LINE('OraErr: ' || v_oraerr ||

' ' || v_oraerrm);

END;

  • Функции SQLCODEиSQLERRMвозвращают номер ошибки и сообщение об ошибкеOracle.

  • Функция DBMS_OUTPUT.PUT_LINEвыводит текстовую строку.

  • Оператор RAISEявно активизирует исключение.

Контрольные вопросы

  1. Что является необязательным для функции (может быть, а может и не быть):

  1. Секция заголовка

  2. Секция определений

  3. Секция выполняемых операторов

  4. Секция исключений

  5. Признак конца – оператор END

  1. Что является необязательным для анонимной процедуры (может быть, а может и не быть):

  1. Секция заголовка

  2. Секция определений

  3. Секция выполняемых операторов

  4. Секция исключений

  5. Признак конца – оператор END

  1. Курсор – это:

  1. Временная рабочая область памяти для PL/SQL

  2. Рабочая область для операторов SQL, возвращающих более одной строки

  3. Рабочая область и область хранения для PL/SQL

  4. Выполняемый модуль кода

  1. Процедуры отличаются от функций тем, что:

  1. Процедуры имеют только выходные параметры, но не входные

  2. Процедуры имеют входные параметры, а функции – нет

  3. Функции имеют выходные параметры, а процедуры – нет

  4. Функции могут иметь входные параметры, а процедуры – нет

  1. Имя переменных PL/SQLдолжно быть уникальным в блокеPL/SQL

ДА/НЕТ

  1. В чём состоит разница между неявными курсорами и явными курсорами?

  1. Явные курсоры обрабатывают только одну строку, а неявные – много строк

  2. Явные курсоры применяются только для операторов DML

  3. Неявные курсоры применяются только для операторов DML

  4. Неявные курсоры позволяют обрабатывать только одну возвращенную строку, а явные – несколько строк

  1. Оператор IFв действительности не требует примененияENDIF

ДА/НЕТ

  1. Какие утверждения являются верными?

  1. Простое CASE-выражение можно заменитьCASE-инструкцией.

  2. Поисковое CASE-выражение можно заменитьCASE-инструкцией.

  3. CASE-инструкцию можно заменить простымCASE-выражением.

  4. CASE-инструкцию можно заменить поисковымCASE-выражением.

  1. Если ошибочная ситуация не обработана в блоке PL/SQL, то она

  1. Игнорируется

  2. Распространяется на вызывающую программу

  3. Вызывает ошибку в блоке PL/SQL

  4. Обрабатывается в соответствии с правилами, применяемыми в языке PL/SQLпо умолчанию

  1. Условие блока обработки ошибок WHEN_OTHERSможет применяться в блокеEXCEPTIONS:

  1. Как первое условие

  2. Как последнее условие

  3. В любом месте, порядок расположения условий не имеет значения

Соседние файлы в папке L45