Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Название:Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2006
- Город:Санкт-Петербург
- ISBN:5-94157-609-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ краткое содержание
Рассмотрены вопросы, необходимые разработчику для создания клиент-серверных приложений с использованием СУБД Firebird, явившейся развитием СУБД Borland Interbase 6. Содержится обзор концепций и моделей архитектуры клиент/сервер, а также практические рекомендации по работе с клиентскими библиотеками Firebird. Детально описаны особенности типов данных SQL, язык манипулирования данными (Data Manipulation Language, DML), а также синтаксис и операторы языка определения данных ( Data Definition Language, DDL). Большое внимание уделено описанию транзакций и приведены советы по их использованию при разработке приложений. Описано программирование на стороне клиента и сервера написание триггеров и хранимых процедур, создание и использование событий базы данных, обработка ошибок в коде на сервере и многое другое. Материал сопровождается многочисленными примерами, советами и практическими рекомендациями.
Для разработчиков баз данных
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Триггеры - ключевые элементы среди возможностей, предоставляемых Firebird для централизованной реализации бизнес-правил внутри системы управления базой данных. Триггер является автономным модулем, который выполняется автоматически, когда выполняется запрос, который будет изменять состояние данных в таблице.
Для написания кодов триггеров используются техники PSQL и хранимых процедур. При этом триггеры не могут вызываться из приложений или других процедур. Соответственно, они не могут получать входные и возвращать выходные аргументы, как это возможно в процедурах. В дополнение к PSQL они включают некоторые контекстные расширения языка, применимые только в модулях триггеров.
Все триггеры в Firebird выполняются на уровне строки каждый раз, когда изменяется образ строки. Firebird поддерживает высокий уровень детализации при определении времени, последовательности и условий, при которых будет выполняться конкретный модуль триггера. Множество модулей может быть определено для каждой фазы и события.
Триггеры являются частью работы транзакции, в которой событие DML изменяет состояние строки. Если транзакция успешно подтверждается, все действия триггеров будут "приняты". Если будет выполнен откат транзакции, все действия триггера будут отменены.
Фаза, событие и последовательность
Триггер может выполняться в одной из двух фаз, связанных с запрошенными изменениями состояния данных: до (before) записи или после (after) нее. Он может применяться к одному из трех событий DML: добавление, изменение или удаление. Начиная с Firebird 1.5 возможно объединение действий триггера для двух или трех событий DML в одном модуле триггера до или после.
Фаза и событие
В табл. 31.1 представлены восемь типов модулей триггеров.
Таблица 31.1. Комбинации фаза/событие для модулей триггеров
Вид триггера |
Описание |
Версия |
BEFORE INSERT |
Вызывается до создания новой строки. Позволяет изменять входные значения |
Все |
AFTER INSERT |
Вызывается после создания новой строки. Не позволяет изменять входные значения. Обычно используется для модификации других таблиц |
Все |
BEFORE UPDATE |
Вызывается до создания новой версии записи. Позволяет изменять входные значения |
Все |
AFTER UPDATE |
Вызывается после создания новой версии записи. Не позволяет изменять входные значения. Обычно используется для изменения других таблиц |
Все |
BEFORE DELETE |
Вызывается до удаления существующей строки. Не принимает изменений никаких столбцов в строке |
Все |
AFTER DELETE |
Вызывается после удаления строки. Не принимает изменений никаких столбцов в строке. Обычно используется для модификации других таблиц |
Все |
BEFORE <���событие> OR <���событие> [OR <���событие>] |
Вызывается до выполнения изменения любого требуемого состояния данных. Действия для события DML должны быть закодированы условно. Действие "Удаление" не может изменять никакие столбцы в строке |
1.5+ |
AFTER <���событиё> OR <���событие> [OR <���событие>] |
Вызывается после выполнения изменения любого требуемого состояния данных. Действия для события DML должны быть закодированы условно. Действия не могут изменять никакие столбцы в строке. Обычно используется для модификации других таблиц |
1.5+ |
Последовательность
Для любой комбинации фаза/событие Firebird позволяет использовать множество триггеров. Вероятно, существует какое-то практическое ограничение, однако можно с уверенностью сказать, что вы можете создавать столько триггеров, сколько вам нужно с использованием целых чисел от 0 до 32 767. Последовательный номер по умолчанию (POSITION) ноль. Хорошей практикой является задание для триггера порядка выполнения, однако явное указание последовательности не является обязательным. Если присутствуют последовательные номера, триггеры будут выполняться в возрастающем порядке. Числа не должны быть уникальными, последовательность может иметь разрывы.
Набор триггеров для фазы/события со значением по умолчанию POSITION 0 будет выполняться в алфавитном порядке их имен. То же самое можно ожидать, если вы имеете группу триггеров, имеющих один и тот же не нулевой последовательный номер.
Следующий пример демонстрирует, как будут выполняться четыре триггера изменения (UPDATE) для таблицы ACCOUNT:
CREATE TRIGGER BU_ACC0UNT5 FOR ACCOUNT
ACTIVE BEFORE UPDATE POSITION 5 AS ...
CREATE TRIGGER BU_ACCOUNTO FOR ACCOUNT
ACTIVE BEFORE UPDATE POSITION 0 AS ...
CREATE TRIGGER AU_ACCOUNT5 FOR ACCOUNT
ACTIVE AFTER UPDATE POSITION 5 AS ...
CREATE TRIGGER AU_ACCOUNT3 FOR ACCOUNT
ACTIVE AFTER UPDATE POSITION 3 AS ...
Кто-то изменяет некоторые строки в таблице ACCOUNT:
UPDATE ACCOUNT SET С ='CANCELED' WHERE C2 = 5;
Вот последовательность событий для каждой изменяемой строки:
1. Выполняется триггер BU_ACCOUNTO.
2. Выполняется триггер BU_ACCOUNTS.
3. Новая версия записи записывается на диск.
4. Выполняется триггер AU_ACCOUNT3.
5. Выполняется триггер AU_ACCOUNT5.
Состояние
Триггер может быть активным (active) или неактивным (inactive). Запускаются только активные триггеры. См. замечания к ALTER TRIGGER по поводу подробностей деактивации триггера.
Создание триггеров
Триггер определяется с помощью оператора CREATE TRIGGER, который состоит из заголовка и тела. Заголовок триггера отличается от заголовка хранимой процедуры, он содержит:
* имя триггера, которое должно быть уникальным в базе данных;
* имя таблицы, идентифицирующее таблицу, с которой ассоциируется триггер;
* атрибуты, которые определяют состояние, фазу, событие DML и, необязательно, последовательность.
Тело триггера, как и тело хранимой процедуры, содержит:
* необязательный список локальных переменных и их типов данных;
* блок операторов на языке процедур и триггеров Firebird, заключенный в операторные скобки BEGIN и END. Эти операторы выполняются, когда запускается триггер. Сам блок может включать другие блоки, так что может существовать много уровней вложенности.
Синтаксис
Для всех версий Firebird синтаксис CREATE TRIGGER одинаков:
CREATE TRIGGER имя FOR {таблица | просмотр}
[ACTIVE | INACTIVE]
{BEFORE | AFTER} {DELETE | INSERT | UPDATE}
[POSITION число]
AS <���тело-триггера> ^
<���тело-триггера> = [<���список-объявления-переменных>] <���блок>
<���список-объявления-переменных> = DECLARE VARIABLE переменная тип-данных;
[DECLARE [VARIABLE] переменная тип-данных; ...]
<���блок> =
BEGIN
<���составной-оператор> [<���составной-оператор> ...]
END
<���составной-оператор> = <���блок> | оператор;
В версии 1.5 возможно слияние всех событий в один триггер фазы:
Читать дальшеИнтервал:
Закладка: