Обработка исключений Гудов А.М., Завозкин С.Ю. 2005.

Презентация:



Advertisements
Похожие презентации
Обработка ошибок. Общие сведения Что такое исключение? –Переменная в PL/SQL, возбуждаемая во время выполнения Как возникает исключение? –Возбуждается.
Advertisements

PL/SQL Введение 1. Типы данных Типы доступные SQL (в Oracle) BOOLEAN CHAR NUMBER RECORD TABLE.
PL/SQL Курсоры. Курсор – специальный элемент, связанный с SQL-оператором SELECT. Объявление курсора происходит в секции объявления базового блока. Работа.
PL/SQL Программная конструкция ОписаниеСреда выполнения Анонимный блок Неименованный блок PL/SQL, вставленный в приложение или созданный интерактивно.
PL/SQL Курсоры в PL/SQL Неявные курсоры создаются PL/SQL неявно для всех команд DML и SELECT. Явные курсоры объявляются программистом, который присваивает.
Динамический SQL (использование в Oracle). Виды предложений SQL МетодТип предложенияТребуемые вызовы пакета DBMS_SQL 1 Незапросные, нет базовых переменных,
МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ. Программная единица PL/SQL Именованные блоки Три основных категории Процедура Функция Пакет Хранятся в базе данных или обрабатываются.
Обработка запросов с использованием курсоров. Что такое курсор? Каждая команда SQL, выполняемая на сервере Oracle, имеет свой курсор. Два типа курсоров:
УПРАВЛЕНИЕ ПОТОКОМ В БЛОКАХ PL/SQL. Управление потоком операций в PL/SQL Логический поток операций можно изменять с помощью управляющих структур: Структуры.
Встроенный динамический SQL. Динамический SQL PL/SQL использует раннее связывание для выполнения операторов SQL. Следствием этого является то, что только.
PL/SQL Триггеры (INSERT, UPDATE, DELETE). Определение Три́ггер базы данных (англ. trigger) это хранимая процедура особого типа, которую пользователь не.
Программируемый клиент ORACLE Технология Pro C/C++
Язык программирования PL/SQL1 Язык программирования ORACLE PL/SQL Учебные материалы ИВЦ АИС.
Защита информации в базах данных. Два подхода Два подхода к вопросу обеспечения безопасности данных: избирательный подход обязательный подход. В обоих.
«ИЗМЕНЕНИЕ ДАННЫХ В БД» Выполнил: студент 722 группы Специальности Информационные системы (по отрослям) Токарев Виктор.
PL/SQL Взаимодействие с СУБД. Специальные типы Имя_таблицы.имя_столбца%TYPE Имя_таблицы%ROWTYPE; Имя_курсора%ROWTYPE;
PL/SQL Триггер блок PL/SQL, выполняемый неявно каждый раз, когда происходит конкретное событие.
Дискретные и автономные транзакции (начиная с версии Oracle8i)
Обеспечение целостности данных Процедурное. Хранимые процедуры Хранимые процедуры пишутся на специальном встроенном языке программирования, они могут.
РАЗРАБОТКА ПРОСТОГО БЛОКА. Структура простого блока DECLARE BEGIN EXCEPTION END;
Транксрипт:

Обработка исключений Гудов А.М., Завозкин С.Ю. 2005

Общие понятия Что такое исключение? Переменная в PL/SQL, возбуждаемая во время выполнения. Как возникает исключение? –Возбуждается сервером. –Возбуждается явно. Как его обрабатывать? –Перехватывать с помощью обработчика исключений. –Распространить в вызывающую среду.

Обработка исключений [DECLARE] BEGIN EXCEPTION END; [DECLARE] BEGIN EXCEPTION END; Перехват исключения Распространение в вызывающую среду Возбуждение исключения Перехват Возбуждение исключения Исключение не перехвачено

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

Перехват исключений EXCEPTION When исключение1 [or исключение2 …] Then оператор1;... [When исключение3 [or исключение4 …] Then оператор1;... When OTHERS Then оператор1;...]

Перехват предопределенных исключений В секции обработки ссылка на стандартное имя. Некоторые стандартные имена исключений: –NO_DATA_FOUND –TOO_MANY_ROWS –INVALID_CURSOR –ZERO_DIVIDE –DUP_VAL_OF_INDEX

Предопределенные исключения: пример Procedure test_exception_1 (v_product_id IN s_product.id%type) IS V_id s_product.id%type; BEGIN Select id into v_idfrom s_product where id=v_product_id; Delete from s_invertory where product_id=v_product_id; Commit; EXCEPTION When NO_DATA_FOUND Then rollback; text_io.put_line(Product number is invalid); When TOO_MANY_ROWS Then rollback; text_io.put_line(Data corraption in table S_PRODUCT); When OTHERS Then rollback; text_io.put_line(Other error occurred); END;

Перехват непредопределенных исключений Объявление Связывание Ссылка Присвоение имени Включение в предложение PRAGMA EXCEPTION_INIT Обработка исключения Декларативная секция Секция обработчика

Непредопределенное исключение: пример DECLARE E_product_rEXCEPTION; PRAGMA EXCEPTION_INIT (E_product_r, -2222); … BEGIN … EXCEPTION When E_product_r Then Text_io.put_line(Integrity constraint violated); … END;

Перехват пользовательских исключений Объявление Возбуждение Ссылка Присвоение имени Явное возбуждение с помощью оператора RAISE Обработка исключения Декларативная секция Секция обработчика Исполняемая секция

Пользовательское исключение: пример DECLARE E_product_rEXCEPTION; … BEGIN … RAISE E_product_r; … EXCEPTION When E_product_r Then Text_io.put_line(Integrity constraint violated); … END;

Функции перехвата исключений Обработчик исключения WHEN OTHERS –Перехватывает все необработанные исключения. –Должен быть последним обработчиком. SQLCODE –Возвращает числовой код ошибки. –Значения: 0 Исключений не было 1 Пользовательское исключение +100 Исключение NO_DATA_FOUND -n Номер ошибки сервера SQLERRM –Возвращает стандартное сообщение об ошибке.

Функции перехвата исключений: пример … BEGIN … EXCEPTION When OTHERS Then rollback; Text_io.put_line(Unknown error: ||SQLCODE|| ||SQLERRM); … END;

Распространение исключений в вызывающую среду DECLARE E_product_rEXCEPTION; E_integrityEXCEPTION; PRAGMA EXCEPTION_INIT (E_product_r, -2222); … BEGIN FOR I IN emp_cursor LOOP begin select …; update …; … RAISE E_integrity; … exception WHEN E_product_r THEN … WHEN E_integrity THEN end; END LOOP; EXCEPTION When NO_DATA_FOUND Then … When OTHERS Then … … END;

Практическое занятие 1. Создайте процедуру, которая бы обновляла номера регионов для служащих отделов. (Входные данные – название региона и новый номер отдела для данного служащего). а) Напишите обработчик исключений, который будет выдавать сообщение о том, что указанный регион не существует б) Напишите обработчик исключений, который бы выдавал пользователю сообщение о том, что для указанного региона уже есть отдел с таким названием в) Напишите обработчик исключений, который выдавал бы пользователю сообщение о том, что указанный номер отдела не существует (используйте атрибут SQL%NOTFOUND и возбудите исключение вручную)

2. Напишите процедуру для вывода на фамилии и названия отдела для служащих, чья заработная плата лежит в диапазоне плюс-минус 100$ от введенного значения. а) Напишите обработчик исключений, который будет выдавать сообщение о том, что служащих с такой зарплатой нет. б) Напишите обработчик исключений, который будет выдавать сообщение о том, что служащих с такой зарплатой несколько. Сообщение должно указывать, сколько сотрудников попадает в этот диапазон зарплат.