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

Лабораторная №9 Создание генераторов и триггеров. Каскадные воздействия.

Цель работы: научится создавать, ставить на выполнение, редактировать и удалять триггер; создавать, ставить на выполнение, редактировать и удалять генератор.

Триггеры

Триггер — это процедура, автоматически исполняемая SQL-сервером при наступлении события "обновление", "удаление" или "добавление" новой записи таблицы. По отношению к инициализирующему их событию различают два типа триггеров:

  • выполняемые до или после наступления события;

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

Нельзя вызывать триггер непосредственно из программы, передавать ему входные параметры и возвращать их значения. Триггеры всегда реализуют действие.

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

Триггер создается SQL-командой:

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

[ACTIVE/INACTIVE]

{BEFORE/AFTER}

{DELETE/INSERT/UPDATE}

[POSITION номер]

AS <тело триггера>[;]

Структура тела триггера:

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

BEGIN

<оператор>

[<оператор>]

END

Значение номера задается числом. Триггеры с меньшими номерами выполняются раньше.

Создадим триггер для родительской таблицы Realty, который при изменении значения ее первичного ключа будет автоматически изменять значение внешнего ключа дочерней таблицы Lease, другими словами, если в таблице Realty изменилось значение поля Adr, то триггер изменит значение поля Adr в соответствующей записи таблицы Lease.

Ход работы:

  1. Запустите утилиту Interactive SQL.

  2. Создайте триггер updat_realty.

CREATE TRIGGER UPDAT_REALTY FOR Realty

ACTIVE

BEFORE UPDATE

AS BEGIN

IF (OLD.Adr <> NEW.Adr) THEN UPDATE Lease

SET Adr = NEW.Adr WHERE Adr = OLD.Adr;

END

  1. Попробуйте изменить значение адреса в таблице Realty. Как видите, это не удается. ПОЯСНИТЕ.

Сообщение о нарушении ссылочной целостности

Изменение значения адреса в таблице Realty

4. Удалите связь между таблицами Realty и Lease (ограничение INTEG_7):

ALTER TABLE Lease

DROP CONSTRAINT INTEG_7

  1. М ожете убедиться, что она отсутствует: теперь таблица Lease не связана с Realty.

  2. Измените значение адреса в таблице Realty.

Просмотр связей таблицы Lease

Как видите, теперь при изменении значения ее первичного ключа триггер автоматически изменяет значение внешнего ключа дочерней таблицы Lease. Другими словами, реализован механизм обеспечения ссылочной целостности "cascade".

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

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

Ход работы:

При создании таблицы Owner поле Non было объявлено как ключевое целочисленного типа.

  1. Создадим генератор GenStore, который при обращении к нему возвращает уникальное целочисленное значение:

CREATE GENERATOR GenStore

SET GENERATOR GenStore TO 1;

      • Создадим триггер, который при добавлении к таблице новой записи обращается к генератору и заносит возвращаемое им значение в ключевое поле.

CREATE TRIGGER NZ_Non FOR Owner

ACTIVE

BEFORE INSERT

AS

BEGIN

NEW.Non=GEN_ID (GenStore,1);

END

Контрольные задания:

  1. Создать триггер для родительской таблицы Owner, который при изменении значения ее первичного ключа будет автоматически изменять значение внешнего ключа дочерней таблицы Lease, т.е. если в таблице Owner изменилось значение поля NOn, то триггер изменит значение поля NOn в соответствующей записи таблицы Lease.

  2. Создать триггер для каскадного удаления записей из таблицы Realty и Lease.