- •Лабораторная работа №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
Лабораторная работа №5. Триггеры, генераторы, исключения
Цель работы
Изучить используемые в Firebird триггеры, генераторы и исключения. Получить навыки работы с триггерами, генераторами и исключениями с помощью команд SQL и с помощью программы "IBExpert".
Исходные данные
Студент получает индивидуальный вариант исходных данных с кратким описанием предметной области, который используется при выполнении всех лабораторных работ. При этом каждая очередная лабораторная работа является продолжением выполненной ранее и поэтому они должны обязательно выполняться последовательно.
Используемые программы
Все операции выполняются с помощью приложения "IBExpert". Отчет создается в редакторе " Microsoft Word".
Теоретические сведения
Генераторы (Generators)
Генераторы используются для генерации уникальных номеров, используемых в ключевых полях. То есть они реализуют те же функциональные возможности в таблицах Firebird, что и поля с автоматическим приращением в других СУБД. Можно указать, чтобы числа генерировались, начиная с заданного начального значения.
Пример создания генератора:
CREATE GENERATOR MyGenerator;
SET GENERATOR MyGenerator TO 1000;
Генераторы непосредственно не привязываются к какому-либо полю. Они просто позволяют генерировать уникальные числа. Для этого используется функция Gen_ID(), встроенная в Firebird, которая генерирует целочисленные значения. Она берет генератор в качестве первого параметра и значение шага в качестве второго. Обычно приращение равно 1.
Обращаться к генератору можно только через функцию Gen_ID().
Бизнес-правила
В реальной жизни вопрос целостности базы данных связан с правилами, установленными у пользователя информационной системы. Например, в компании могут быть установлены такие правила:
клиентам не разрешается размещать заказы на сумму, превышающую их лимит кредита;
сведения о выполненных заказах хранятся в течение шести месяцев, а за-тем удаляются;
нельзя выдавать читателю новых книг, пока он не вернет взятых ранее;
каждый раз, когда продается какой-нибудь товар, для служащего, оформившего продажу, и для отдела, в котором этот служащий работает, на стоимость проданного товара увеличивается значение определенного по-ля, используемого для вычисления премии; в случае возврата всего или части проданного товара, значение этого поля соответствующим образом должно уменьшиться;
каждый раз, когда приходит новая поставка, количество поставленного товара на складе увеличивается на количество товара в поставке.
Такие правила называются бизнес-правилами. В первом стандарте SQL считалось, что эти правила выходят за рамки ответственности СУБД и за их реализацию отвечает прикладная программа, осуществляющая доступ к базе данных. Впервые в 1986 году в СУБД Sybase было введено понятие триггер, что позволило включить реализацию бизнес-правил в базу данных.
Триггеры (Triggers)
С любым событием, вызывающим изменение содержимого таблицы, можно связать сопутствующее действие (триггер), которое СУБД должна выполнять при каждом возникновении события. Триггер – это группа операторов языка SQL, которые автоматически выполняется при вставке, модификации или удалении записи.
В СУБД можно создавать триггеры, работающие при следующих шести условиях:
до вставки записи (BEFORE INSERT);
после вставки записи (AFTER INSERT);
до удаления записи (BEFORE DELETE);
после удаления записи (AFTER DELETE);
до модификации записи (BEFORE UPDATE);
после модификации записи (AFTER UPDATE).
В Firebird 2.5 триггер может срабатывать при возникновении одного из нескольких событий. Триггеры могут вызывать выполнение хранимых процедур *PPT, выполнять различные проверки и генерировать исключения. Обычно триггеры используются для задания сложных правил контроля целостности базы данных, которые невозможно реализовать с помощью ограничений.
Недостатком триггеров является их влияние на производительность операций с базой данных.
Синтаксис оператора создания триггера:
CREATE TRIGGER <Имя>
FOR { <базовая таблица> | <имя представления>
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <операция> [OR <операция> [OR <операция>]]
[POSITION приоритет триггера]
AS <тело триггера> [разделитель];
где
<операция> = {INSERT | UPDATE | DELETE}
Тело триггера определяется следующим образом:
<тело триггера> = [<список переменных>] <блок операторов>
<список переменных> =
DECLARE [VARIABLE] <переменная> <тип данных>;
[DECLARE [VARIABLE] <переменная> <тип данных>; ...]
<блок операторов> =
BEGIN
<составной оператор> [<составной оператор>...]
END
<составной оператор> = <блок операторов> | <оператор>;
Параметры, входящие в этот оператор, пояснены в табл. 1.
Таблица 1
Параметр |
Описание |
---|---|
Имя |
Уникальное название триггера. |
Таблица |
Название таблицы или просмотра, для которых создается триггер |
ACTIVE | INACTIVE |
Указывает будет ли работать триггер |
BEFORE | AFTER |
Обязательный параметр, показывающий когда будет срабатывать триггер |
INSERT | UPDATE | DELETE |
Одно из событий, на которые будет срабатывать триггер |
POSITION Номер |
Определяет порядок срабатывания триггера, когда имеется несколько триггеров, реагирующих на одно и то же событие. Номер – целое число между 0 и 32767 |
DECLARE [VARIABLE] Переменная <тип данных> |
Описание локальной переменной, которую можно будет использовать только в этом триггере |
Оператор |
Любой одиночный оператор языка хранимых процедур и триггеров Firebird |
Внутри тела триггера доступны две контекстные переменные NEW и OLD, которые позволяют получить доступ к новым и старым значениям полей записи, при изменении которой был вызван триггер.
Пример генератора и триггера:
CREATE GENERATOR EMP_NO_GEN;
CREATE TRIGGER SET_EMP_NO FOR EMPLOYEE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.EMP_NO IS NULL) THEN
NEW.EMP_NO = GEN_ID(EMP_NO_GEN, 1);
END;