
- •Лабораторная работа №1. Операции с базой данных
- •Ход работы
- •Создание базы данных
- •Регистрация базы данных
- •Подключение к базе данных
- •Удаление базы данных
- •Извлечение метаданных
- •Резервное копирование и восстановление
- •Отчет о выполнении работы
- •Лабораторная работа №2. Домены
- •Домены (Domains)
- •Задание
- •Ход работы
- •Отчет о выполнении работы
- •Лабораторная работа №4. Ограничения
- •Ограничение первичного ключа (Primarykey)
- •Ограничения уникальности (Unique)
- •Ограничения внешнего ключа (Foreignkeys)
- •Ограничения атрибутов (Checks)
- •Задание
- •Ход работы
- •Отчет о выполнении работы
- •Лабораторная работа №5. Триггеры, генераторы, исключения
- •Бизнес-правила
- •Триггеры (Triggers)
- •Исключения (Exceptions) и обработка ошибок
- •Операторы языка хранимых процедур и триггеров
- •If … then … else
- •Задание
- •Ход работы
- •Отчет о выполнении работы
- •Организация доступа к данным
- •TibDatabase
- •Подсоединение к бд
- •TibTransaction
- •Датасеты
- •IbDataSet
- •Буферизация записей
- •Обновление данных
- •Перебор записей
- •Master-Detail
- •Locate (поиск)
- •Работа с blob
- •Jpeg в Blob
- •Blob и dbGrid
- •IbTable
- •Почему компонент ibTable не рекомендуют?
- •IbQuery
- •Параметризированные запросы
- •Фильтрация
- •IbTable
- •IbDataSet, ibQuery
- •OnFilterRecord
- •IbUpdateSql
- •IbUpdateSqlw
- •IbStoredProc
- •EibError
- •IbDatabaseInfo
- •IbsqlMonitor
- •IbEvents
- •IbExtract
- •IbConnectionBroker
- •IbScript
- •IbsqlParser
- •IbDatabaseIni
Исключения (Exceptions) и обработка ошибок
Исключение – это определенная пользователем ошибка, которая имеет имя и связанный с ним текст сообщения.
Для создания исключения служит оператор:
CREATE EXCEPTION Имя 'Текст сообщения';
Для возбуждения исключения в теле триггера или хранимой процедуры служит оператор:
EXCEPTION Имя;
При возникновении исключения нормальный ход выполнения прерывается и Firebird ищет ближайший обработчик этого исключения в текущем блоке BEGIN … END. Если обработчика исключения в этом блоке нет, то Firebird поднимается на уровень выше (к внешнему блоку BEGIN … END) и ищет обработчик там, и т.д. Если обработчик исключения найден, то выполняется его код и далее управление передается на первый оператор за обработчиком исключения. В случае если было сгенерировано исключение, которое никто не обрабатывает, это исключение передается в клиентское приложение. Чаще всего это приводит к выдаче пользователю сообщения о произошедшей ошибке.
Синтаксис оператора для обработки исключений внутри тела триггера или хранимой процедуры имеет следующий вид:
WHEN {<ошибка> [, <ошибка> ...] | ANY} DO
<составной оператор>
<ошибка> = {EXCEPTION Имя | SQLCODE Номер | GDSCODE Код_Ошибки}
Параметры, входящие в этот оператор, описаны в табл. 2
Таблица 2
Параметр |
Описание |
---|---|
ANY |
Позволяет обработать все типы ошибок |
EXCEPTION Имя |
Обработка исключения, сгенерированного пользователем (оператором EXCEPTION) |
SQLCODE Номер |
Обработка ошибки SQL |
GDSCODE Код_Ошибки |
Обработка ошибки Firebird |
Операторы языка хранимых процедур и триггеров
В этом разделе приведены некоторые из используемых при написании триггеров и хранимых процедур операторов, которые не были описаны выше.
If … then … else
Для реализации сложных алгоритмов сервер InterBase поддерживает операторы ветвления.
IF (условие)
THEN <составной оператор>
[ELSE <составной оператор>]
FOR SELECT … DO
Представляет собой оператор выборки данных и обработки их в цикле по записям.
FOR <выражение select>
DO <составной оператор>
WHILE … DO
Оператор цикла.
WHILE (условие)
DO <составной оператор>
Задание
Лабораторную работу следует выполнять в следующем порядке:
Создать аналогично предыдущим лабораторным работам рабочую папку и назвать ее "ЛР5".
Скопировать в эту папку файл сценария, созданный при выполнении лабораторной работы №4.
Открыть в приложении "IBExpert" этот сценарий.
Исправить текст комментариев и сделать, чтобы база данных теперь создавалась в папке "ЛР5".
Добавить в сценарий операторы создания генераторов, исключений и триггеров. Для каждого суррогатного первичного ключа должен быть создан соответствующий генератор и триггер.
Создать триггеры, реализующие ссылочную целостность, заменив одно ограничение внешнего ключа. Команды создания этого внешнего ключа из сценария не удалять, а добавить команду удаления этого ограничения перед созданием триггеров. Также добавить оператор создания индекса по полю бывшего внешнего ключа. Триггеры должны обеспечивать каскадное обновление и удаление зависимых данных, а также запрет ссылки на отсутствующую запись.
Создать не менее пяти триггеров, реализующих бизнес-правила в соответствии с выданным индивидуальным заданием. Для каждого триггера должны присутствовать комментарии, поясняющие выполняемые операции.
Выполнить сценарий и сохранить его в папке "ЛР5".
Зарегистрировать созданную базу данных в программе "IBExpert" и подключиться к ней.
Создать в своей базе данных таблицу в диалоговом режиме. Она должна называться "TestTriggers" и содержать десять полей разных типов с произвольными именами. При создании поля суррогатного первичного ключа сразу указать необходимость создания для него генератора и триггера. Добавить в диалоговом режиме к этой таблице три триггера выполняющих произвольные действия. Скопировать в отчет сценарий создания этой таблицы и триггеров, который сгенерирует "IBExpert".
Создать в папке "ЛР5" резервную копию базы данных.
Создать и сохранить в папке "ЛР5" файл с отчетом о выполнении лабораторной работы, который должен называться "Отчет.doc".