Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_k_ekzamenu_TBD.doc
Скачиваний:
10
Добавлен:
23.09.2019
Размер:
958.98 Кб
Скачать

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

CREATE TRIGGER ИмяТриггера FOR ИмяТаблицы

[ ACTIVE | INACTIVE ] указывает, активен триггер или нет

{ BEFORE | AFTER } до (BEFORE) или после (AFTER) запоминания изменений в БД

{ DELETE | INSERT | UPDATE } указывает операцию над таблицей БД, при выполнении которой срабатывает

[ POSITION номер ] каким по счету будет выполняться триггер

AS [<объявление локальных переменных>]

BEGIN <оператор> END

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

Значение OLD.имя_столбца позволяет обратиться к состоянию столбца, имевшему место до внесения возможных изменений, а значение NEW.имя_столбца – к состоянию столбца, имевшему место после внесения возможных изменений.

Удаление триггера: DROP TRIGGER ИмяТриггера

Обеспечение каскадных воздействий с помощью триггеров. Если между двумя или более таблицами БД установлены отношения ссылочной целостности («один ко многим», «один к одному»), при изменении столбца связи в родительской таблице должно быть изменено значение столбца связи у записей соответствующих дочерних таблиц. Такое воздействие носит название каскадного обновления. Триггер, реализующий каскадное обновление в дочерней таблице, будет в числе прочих содержать оператор:

IF (OLD.ПолеСвязиРодителя <> NEW. ПолеСвязиРодителя) THEN UPDATE Дочерняя.Таблица

SET ПолеСвязиДочернейТаблицы = NEW.ПолесвязиРодителя

WHERE ПолеСвязиДочернейТаблицы = OLD.ПолеСвязиРодителя ;

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

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

DELETE FROM ДочерняяТаблица

WHERE ПолеСвязиДочернейТаблицы = ПолеСвязиРодителя ;

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

1.1.10.Изменение существующего триггера:

ALTER TRIGGER ИмяТриггера FOR ИмяТаблицы

[ ACTIVE | INACTIVE ]

{ BEFORE | AFTER }

{ DELETE | INSERT | UPDATE }

[ POSITION номер ]

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

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

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

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

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

Для создания генератора используется оператор: CREATE GENERATOR ИмяГенератора ;

Установка стартового значения генератора: SET GENERATOR ИмяГенератора TO СтартовоеЗначение;

Обращение к генератору (получение уникального значения): GEN_ID( ИмяГенератора , Шаг )

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]