- •Актюбинский государственный университет им. К.Жубанова
- •К.Ф.М.Н., доцент кафедры информационных систем _______Бигалиева м.Ж.
- •Лабораторная работа №1
- •Лабораторная работа №2-3
- •Лабораторная работа №4
- •Лабораторная работа №5-6
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Лабораторная работа №10
- •Лабораторная работа №11
- •Лабораторная работа №9
- •Лабораториялық жұмыс №12
Лабораторная работа №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 название исключения;
Задания для самостоятельного выполнения
Добавить исключения для триггеров:
CREATE EXCEPTION no_del_stud 'Нельзя удалять – имеются данные об этом студенте';
CREATE EXCEPTION no_ins_avgb 'Нельзя добавить – студента с таким номером нет';
CREATE EXCEPTION no_upd_grup 'Нельзя изменять– имеются данные об этом студенте';
CREATE EXCEPTION no_upd_avgb 'Нельзя изменять – студента с таким номером нет';
Создать триггер 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 ; !!
Создать триггер BEFORE_UPDATE_STUD, реализующий бизнес-правило для связи таблиц Avg_ball ↔ Grup, срабатываемый при измении кода студента в таблице Grup, т.е. запрещающий данное изменение в случае если в таблице Avg_ball имеются записи об этом студенте
Создать триггер BEFORE_INSERT_AVGB, реализующий бизнес-правило для связи таблиц Avg_ball ↔ Grup, срабатываемый при добавлении в таблицу Avg_ball записи о студенте, информация о котором отсутствует в таблице Grup
Создать триггер BEFORE_ UPDATE _AVGB, реализующий бизнес-правило для связи таблиц Avg_ball ↔ Grup, срабатываемый при изменении имени студента в таблице Avg_ball, информация о котором отсутствует в таблице Grup
Список литературы:
Архангельский А.Я. «Язык SQL в Delphi5». –Москва, ЗАО «Издательство Бином» , 2000.
Гофман В., Хомоненко А. «Delphi7».СПб.:ВХV-Петербург.
Епанешников Д.Д., «Delphi5.Базы данных»-Москва, «Диалог-Кифа»,2000.
Кандзюба С.П., Громов В.И. Delphi6. Базы данных и приложения. Лекции и упражнения. – К.: ДиаСофт, 2001.
Карпова Т. Базы данных: модели, разработка, реализация. – СПб.: Питер, 2001.
Пономарев В. Delphi7. Самоучитель баз данных. – СПб.: Питер, 2003.
Шумаков И., Фаронов В.В. «Руководство разработчика баз данных в Delphi5».-Москва, Нолидж, 1999.
