Создание триггеров. Создание генераторов

Создание генераторов

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

Создание генератора:

CREATE GENERATOR <Имя генератора>

Начальное значение задается инструкцией:

SET GENERATOR <Имя генератора> TO <Начальное значение (целое число)>

Пример:

CREATE GENERATOR GenStore

SET GENERATOR GenStore TO 1

Обращение к созданному генератору выполняется с помощью функции

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


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

Создание триггера:

CREATE TRIGGER <> FOR <>

[ACTIVE | INACTIVE]

{BEFORE | AFTER}

{UPDATE | INSERT | DELETE}

[POSITION <Число>]

AS <Тело триггера>

Описатели ACTIVE | INACTIVE определяют активность триггера сразу после его создания. По умолчанию действует ACTIVE.

Описатели BEFORE | AFTER задают момент начала выполнения триггера до или после наступления соответствующего события, связанного с изменением записей.

Описатели UPDATE | INSERT | DELETE определяют, при наступлении какого события вызывается триггер – при редактировании, добавлении или удалении записей.

Для одного события можно создать несколько триггеров, каждый из которых будет автоматически выполнен (если находится в активном состоянии). При наличии нескольких триггеров порядок их вызова (выполнения) определяет число, указанное в операнде POSITION. Триггеры выполняются в порядке возрастания этих чисел.

Удаление триггера:

DROP TRIGGER <Имя триггера>

Изменение триггера:

ALTER TRIGGER

Для доступа к значениям столбца используются инструкции формата:

OLD.<Имя столбца> - обращается к старому (до внесения изменений) значению столбца,

NEW.<Имя столбца> - обращается к новому (после внесения изменений) значению столбца.

Пример:

Создание триггера для занесения в ключевой столбец уникальных значений

CREATE TABLE Store

(S_Code INTEGER NOT NULL,

PRIMARY KEY (S_Code));

CREATE GENERATOR GenStore

SET GENERATOR GenStore TO 1

CREATE TRIGGER CodeStore FOR Store

ACTIVE

BEFORE INSERT

AS

BEGIN

NEW.S_Code = GEN_ID (GenStore, 1);

END

При добавлении к таблице Store новой записи ключевому столбцу S_Code этой записи автоматически присваивается уникальное значение. Это обеспечивается обращением GEN_ID к генератору GenStore.

Пример:

Реализация каскадного удаления записей с участием триггера

CREATE TABLE Store

(S_Code INTEGER NOT NULL,

PRIMARY KEY (S_Code));

CREATE TABLE Cards

(C_Code INTEGER NOT NULL,

C_Code2 INTEGER NOT NULL,

PRIMARY KEY (C_Code));

CREATE TRIGGER DeleteStore FOR Store

ACTIVE

AFTER DELETE

AS

BEGIN

DELETE FROM Cards WHERE Store.S_Code = Cards.C_Code2;

После удаления записи в таблице Store буду автоматически удалены все соответствующие записи в таблице Cards.

Замечание: для таблиц не должны действовать ограничения ссылочной целостности, заданные на физическом уровне.

Пример:

Обновление столбцов связи (ключевых столбцов) связанных таблиц, заключающееся в том, что при изменении значения столбца связи главной таблицы соответственно изменяются значения столбца связи всех связанных записей подчиненной таблицы.

CREATE TRIGGER ChangeStore FOR Store

ACTIVE

BEFORE UPDATE

AS

BEGIN

IF (OLD.S_Code <> NEW.S_Code)

THEN UPDATE Cards

SET C_Code2 = NEW.S_Code

WHERE C_Code2 = OLD.S_Code;

END

При изменении столбца S_Code, используемого для связи главной таблицы Store с подчиненной таблицей Cards, автоматически изменяются значения столбца связи C_Code2 соответствующих записей подчиненной таблицы.

Чтобы столбец главной таблицы можно было редактировать, по нему не должен быть создан ключ.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: