Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие ТБД.doc
Скачиваний:
48
Добавлен:
04.09.2019
Размер:
1.92 Mб
Скачать

3.6.7.Использование триггеров для реализации бизнес-правил

Триггеры активно используются для реализации бизнес-правил. В частности, это может быть установка с помощью генераторов уникальных значений индексных полей, накапливание статистики в других таблицах и многое другое.

Пример.

Реализуем простейшее правило формирования уникального значения столбца. Пусть столбец N_RASH в таблице RASHOD должен содержать уникальное значение. Для этой цели определим генератор RASHOD_N_RASH и установим его начальное значение 20.

CREATE GENERATO RASHOD_N_RASH

SET GENERATOR RASHOD_N_RASH TO 20 ;

При добавлении новой записи будем присваивать столбцу N_RASH уникальное значение, полученное при помощи генератора:

CREATE TRIGGER BI_RASHOD_GEN FOR RASHOD

ACTIVE

BEFORE INSERT

BEGIN

NEW.N_RASH = GEN_ID(RASHOD_N_RASH,1);

END

3.7.Использование генераторов

Генератор – хранимый на сервере БД механизм, возвращающий уникальные значения никогда не совпадающие со значениями, выданными тем же самым генератором в прошлом. Используется для установки уникальных значений столбцов.

Для создания генератора используется оператор:

CREATE GENERATOR ИмяГенератора ;

Установка стартового значения генератора:

SET GENERATOR ИмяГенератора TO СтартовоеЗначение;

Обращение к генератору (получение уникального значения):

GEN_ID( ИмяГенератора , Шаг )

Пример:

CREATE GENERATOR RASHOD_N_RASH;

SET GENERATOR RASHOD_N_RASH TO 20 ;

CREATE TRIGGER BI_RASHOD FOR RASHOD

ACTIVE

BEFORE INSERT

AS

BEGIN

NEW.N_RASH = GEN_ID(RASHOD_N_RASH, 1);

END

3.8.Транзакции

3.8.1.Откат изменений и целостность бд

Существует несколько способов внесения изменений в таблицы БД. Для локальных (не серверных) БД характерен подход немедленного отображения изменений. Все изменения, внесенные операторами изменения данных в БД немедленно физически запоминаются в таблицах БД и становятся доступны для всех пользователей БД. Отказаться от изменений в этом случае невозможно.

Необходимость отката изменений обуславливается тем, что БД всегда должна находиться в целостном состоянии. Классическим примером перехода БД из одного целостного состояния в другое является бухгалтерская проводка (операция), когда некоторая сумма S должна быть списана со счета K и зачислена на счет D. Только успешное выполнение этих двух операций гарантирует целостность информации в БД. Но целостность, например, будет нарушена, если в результате сбоя сумма S будет списана со счета K, но не будет зачислена на счет D. Поэтому в случае ошибки списания/зачисления суммы результаты предыдущей операции должны быть отменены.

Существуют механизмы отката изменений в БД в случае невыполнения условия успешного завершения всех операций в составе группы. Один из таких механизмов носит название обработка транзакций. Обычно обработка транзакций реализуется серверами БД.

3.8.2.Понятие транзакции

Транзакция – это единичное или чаще групповое изменение БД, которое или выполняется полностью, или не выполняется вообще.

Результаты выполнения транзакции записываются в БД только в том случае, если вся транзакция завершилась успешно. Таким образом, транзакция переводит БД из одного целостного состояния в другое.

Начало транзакции инициируется оператором :

SET TRANSACTION [имя транзакции]

Подтверждение транзакции, т.е. санкционировать физическое запоминание сделанных изменений в БД выполняется оператором COMMIT

COMMIT WORK [TRANSACTION name]

Отказаться от физического запоминания сделанных изменений («откатить изменения») можно с помощью оператора.

ROLLBACK WORK [TRANSACTION name]

Замечание. Описанные выше операторы представлены в упрощенном формате. Полный формат содержит дополнительные параметры управления транзакциями.