Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КлсервБД_лаб.doc
Скачиваний:
4
Добавлен:
15.11.2019
Размер:
2 Мб
Скачать
☆

Лабораторная работа №8

Тема: Построение триггеров. Обработка исключительных ситуаций

Цель: научить создавать и удалять триггеры, реализующие бизнес-правила функционирования СУБД, обрабатывать исключительные ситуации.

Материалы и оборудование: IBConsole, Delphi6/7

Методические рекомендации.

Триггеры

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

Следующая таблица отражает расширения языка для триггеров:

Инструкция

Описание

NEW.column

Позволяет обратиться к значению столбца, имевшему место после внесения изменений.

OLD.column

Позволяет обратиться к значению столбца, имевшему место до внесения изменений.

POST_EVENT event_name

Отправляет сообщение event_name.

Синтаксис

CREATE TRIGGER имя_ триггера FOR имя_ таблицы

[ACTIVE | INACTIVE]

{BEFORE | AFTER}

{DELETE | INSERT | UPDATE}

[POSITION номер]

AS

DECLARE VARIABLE локальная_переменная тип_ данных;

[DECLARE VARIABLE локальная_переменная тип_ данных; ...]

BEGIN

<оператор>;

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

END

Таблица. Описание аргументов оператора создания триггеров

Аргумент

Описание

ACTIVE

INACTIVE

Указывает, будет ли триггер активен

BEFORE

AFTER

Определяет, будет ли триггер срабатывать до или после изменения данных.

DELETE | INSERT | UPDATE

Определяет операцию для изменения данных.

POSITION номер

Определяет очередность срабатывания триггера, если для одной и той же таблицы создано несколько однотипных триггеров

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

CREATE EXCEPTION название исключения 'Сообщение;

Созданное исключение можно удалить инструкцией

DROP EXCEPTION название исключения;

Задания для самостоятельного выполнения

  1. Добавить исключения для триггеров:

CREATE EXCEPTION no_del_stud 'Нельзя удалять – имеются данные об этом студенте';

CREATE EXCEPTION no_ins_avgb 'Нельзя добавить – студента с таким номером нет';

CREATE EXCEPTION no_upd_grup 'Нельзя изменять– имеются данные об этом студенте';

CREATE EXCEPTION no_upd_avgb 'Нельзя изменять – студента с таким номером нет';

  1. Создать триггер BEFORE_DELETE_ STUD, реализующий бизнес-правило для связи таблиц Avg_ball ↔ Grup, срабатываемый при удалении записи о студенте из таблицы Grup, т.е. если в таблице Avg_ball имеются записи о студенте, то нельзя удалять записи об этом студенте из таблицы Grup. Выдать соответствующее сообщение

SET TERM !! ;

CREATE TRIGGER BEFORE_DELETE_STUD FOR GRUP

ACTIVE BEFORE DELETE POSITION 0

AS

DECLARE VARIABLE stud_count INTEGER ;

BEGIN

SELECT count(kod) from Avg_ball

WHERE AVG_BALL.KOD = GRUP.KOD

INTO :Stud_count ;

IF (:Stud_count > 0) THEN EXCEPTION no_del_stud ;

END !!

SET TERM ; !!

  1. Создать триггер BEFORE_UPDATE_STUD, реализующий бизнес-правило для связи таблиц Avg_ball ↔ Grup, срабатываемый при измении кода студента в таблице Grup, т.е. запрещающий данное изменение в случае если в таблице Avg_ball имеются записи об этом студенте

  2. Создать триггер BEFORE_INSERT_AVGB, реализующий бизнес-правило для связи таблиц Avg_ball ↔ Grup, срабатываемый при добавлении в таблицу Avg_ball записи о студенте, информация о котором отсутствует в таблице Grup

  3. Создать триггер BEFORE_ UPDATE _AVGB, реализующий бизнес-правило для связи таблиц Avg_ball ↔ Grup, срабатываемый при изменении имени студента в таблице Avg_ball, информация о котором отсутствует в таблице Grup

Список литературы:

  1. Архангельский А.Я. «Язык SQL в Delphi5». –Москва, ЗАО «Издательство Бином» , 2000.

  2. Гофман В., Хомоненко А. «Delphi7».СПб.:ВХV-Петербург.

  3. Епанешников Д.Д., «Delphi5.Базы данных»-Москва, «Диалог-Кифа»,2000.

  4. Кандзюба С.П., Громов В.И. Delphi6. Базы данных и приложения. Лекции и упражнения. – К.: ДиаСофт, 2001.

  5. Карпова Т. Базы данных: модели, разработка, реализация. – СПб.: Питер, 2001.

  6. Пономарев В. Delphi7. Самоучитель баз данных. – СПб.: Питер, 2003.

  7. Шумаков И., Фаронов В.В. «Руководство разработчика баз данных в Delphi5».-Москва, Нолидж, 1999.