Professional Documents
Culture Documents
ОБД 6
ОБД 6
СТВОРЕННЯ ТРИГЕРІВ
Де:
Тable – ім’я таблиці чи уявлення, для котрих спрацьовує тригер, коли визначена
операція відбувається над таблицею чи уявлення.
ACTIVE (по умовчанню) – означає, що тригер спрацьовує при наявності умов.
INACTIVE – означає, що тригер неактивний.
BEFORE - означає, що тригер спрацьовує перед асоційованої операції.
AFTER - означає, що тригер спрацьовує після асоційованої операції.
DELETE | INSERT | UPDATE - означає дію над таблицею, котра викликає
спрацювання тригера.
POSITION number - визначає порядок спрацювання для тригера перед тією ж
дією чи після тієї ж дії. number повинен бути цілим від 0...32767.
Тригер з меншим номером спрацьовує раніше. За замовчуванням: 0
= перший тригер спрацьовує. Номера тригерів не повинні бути
послідовні. Тригери для однієї і тієї ж дії з однаковим позиційним
номером будуть спрацьовувати у випадковому порядку.
DECLARE VARIABLE var <datatype> - оголошує локальні змінні, які
використовуються тільки в тригері. Кожному оголошенню повинно
передувати DECLARE VARIABLE, яке повинно завершуватися
точкою з крапкою (;).
Param – ім’я локальної змінної, унікально для змінної всередині тригера.
<datatype> - будь-який тип даних InterBase.
Statement – будь-яка одинична інструкція в мові процедур і тригерів InterBase.
Кожна інструкція (виключаючи BEGIN і END) повинні
завершуватися точкою з зап’ятою (;).
Terminator - термінатор визначенний SET TERM, який вказує на завершення
тіла тригера. Використовується тільки в ISQL.
2
Приклад:
Наступний тригер, SAVE_SALARY_CHANGE, робить коректуючі
модифікації таблиці SALARY_HISTORY, коли проходять зміни платні
співпрацівника в таблиці EMPLOYEE:
SET TERM !! ;
CREATE TRIGGER SAVE_SALARY_CHANGE FOR EMPLOYEE
AFTER UPDATE AS
BEGIN
IF (OLD.SALARY <> NEW.SALARY) THEN
INSERT INTO SALARY_HISTORY
(EMP_NO, CHANGE_DATE, UPDATER_ID, OLD_SALARY,
PERCENT_CHANGE)
VALUES (OLD.EMP_NO, "now", USER, OLD.SALARY,
(NEW.SALARY - OLD.SALARY) * 100 / OLD.SALARY);
END !!
SET TERM ; !!
3
тому носять назву "тригери для подій рівня схеми БД". Перелік подій, що їх
запускають:
- SERVERERROR - тригер спрацьовує при виникненні серверної помилки;
- LOGON - тригер спрацьовує при успішному підключенні до системи
клієнтського додатку;
- LOGOFF - тригер спрацьовує перед відключенням клієнтського додатку;
- CREATE - тригер спрацьовує при додаванні до схеми нового об’єкту
командою CREATE;
- DROP - тригер спрацьовує перед спробою видалити зі схеми об’єкт командою
DROP;
- ALTER - тригер спрацьовує при зміні об’єкту схеми командою ALTER.
5
Створимо для таблиці STUDENT тригер, котрий буде підставляти в поле
person_id чергове унікальне значення:
SET TERM !! ;
CREATE TRIGGER person_id_gen FOR STUDENT
BEFORE INSERT AS
BEGIN
new.person_id = gen_ id(person_ id_gen, 1);
END !!
SET TERM ; !!
Наберемо запит:
INSERT INTO STUDENT(first_name, middle_name, last_name, start_date)
VALUES ('Сергей','Георгиевич','Тищенко','03.05.2000')
6
6.3 ЗАВДАННЯ НА ЛАБОРАТОРНУ РОБОТУ
1. Створити тригери для таблиці і уявлення, ім’я яких вкаже викладач.
2. Перевірити роботу тригерів.
7
Варіант 5. АБОНЕНТИ, ДОВІДНИК, ЗВ’ЯЗКІВЦІ. За допомогою тригерів
забезпечити, щоб абоненти не платили за телефон своїх сусідів.
Тригер повинен спрацьовувати після операціі INSERT для таблиці і до
операції – для уявлення.
8
Варіант 10. НАДОЇ, ФУРАЖ, РЕЖИМ. За допомогою тригерів
забезпечити, щоб одній групі не можна було поставити фураж калорійностю
більше за задану кількість одиниць.
Тригер повинен спрацьовувати після операціі UPDATE для уявлення і
після – для таблиці.
9
Варіант 19. ГРУПИ, СТУДЕНТИ, ОЦІНКИ. З допомогою тригерів
забезпечити, щоб при одержанні трьох двійок студент автоматично виключався
з списку групи.
Тригер повинен спрацьовувати після операціі INSERT для таблиці і до
операції – для уявлення.
10
Варіант 24. КІМНАТИ, СТУДЕНТИ, СТУДЕНТ, ЩО МЕШКАВ. З
допомогою тригерів забезпечити, щоб кількість проживаючих у кімнаті не
перевищувала місткості цієї кімнати.
Тригер повинен спрацьовувати після операціі UPDATE для уявлення і
після – для таблиці.
11