Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fondovi-lekcii.doc
Скачиваний:
20
Добавлен:
10.11.2018
Размер:
4.09 Mб
Скачать

3.2. Приклад тригера.

Давайте розглянемо простий приклад тригера, що спрацьовує ДО ВСТАВКИ в таблицю і заповнює поле первинного ключа.

CREATE TABLE Table_example (

ID INTEGER NOT NULL,

NAME VARCHAR(80),

PRICE_1 DOUBLE PRECISION,

CONSTRAINT pkTable PRIMARY KEY (ID));

Тут поле ID є первинним ключем і значення цього ключа повинні бути унікальними в межах таблиці. Щоб забезпечити виконання цієї вимоги, створимо генератор і тригер, що буде одержувати значення генератора і підставляти його в таблицю. Таким чином, у полі ID завжди будуть унікальні значення, тому що значення генератора буде збільшуватися щораз при звертанні до тригера. Отже, створюємо генератор:

CREATE GENERATOR GEN_TABLE_EXAMPLE_ID;

І встановлюємо його початкове значення в одиницю:

SET GENERATOR GEN_TABLE_EXAMPLE_ID TO 1;

Тепер необхідно створити тригер. Треба сказать, що тригер, як і збережувана процедура, може містити у своєму тілі кілька операторів, розділених крапкою з комою. Тому вам необхідно скористатися командою зміни роздільника команд SET TERM, як це було описано в розділі "Збережувані процедури". Ми ж будем наводити тексти тригерів без обрамлення командами зміни роздільника.

Отже, розглянемо текст нашого тригера:

CREATE TRIGGER Table_example_bi FOR Table_example

ACTIVE BEFORE INSERT POSITION 0

AS

BEGIN

IF (NEW.ID IS NULL) THEN

NEW.ID = GEN_ID(GEN_TABLE_EXAMPLE_ID,1);

END

Як бачите, тригер дуже нагадує збережувану процедуру (фактично, як уже було сказано, це і є особливий різновид ЗП), але є і декілька відмінностей. Давайте докладно розберемо "будову" тригера.

Опис команди створення тригера починається з ключових слів CREATE TRIGGER, після яких з’являється ім'я тригера – Table_example_bi. Потім слідує ключове слово FOR, після якого зазначене ім'я таблиці, для якої створюється тригер, – Table_example.

На другому рядку команди приводиться опис сутності тригера – ключове слово ACTIVE указує, що тригер є "активним". Тригер також може бути переведений у стан INACTIVE. Це означає, що він буде зберігатися в базі даних, але він не буде спрацьовувати. Сполучення ключових слів BEFORE INSERT визначає, що тригер спрацьовує ДО ВСТАВКИ; а ключове слово POSITION і число 0 указують черговість (позицію) створюваного тригера серед тригерів того ж типу для даної таблиці. Позиція тригера потрібна тому, що в InterBase можливо створити більш 32000 тригерів кожного виду (наприклад, BEFORE INSERT чи AFTER UPDATE), і серверу потрібно вказати, у якому порядку ці тригери будуть виконуватися. Тригери з меншою позицією виконуються першими. Якщо є декілька тригерів з однакової позицією, то вони будуть виконуватися за абеткою.

Усе розглянуте вище до ключового слова AS утворює заголовок тригера. Після AS слідує тіло тригера. Власне в тілі і здійснюється вставка значення в поле первинного ключа. Але спочатку за допомогою вже знайомого вам оператора IF.. .THEN перевіряється, чи не було заповнено це поле на клієнті. Вираз перевірки, що повертає булеву TRUE (істина) чи FALSE (неправда), виглядає так:

NEW.ID IS NULL

Тут NEWконтекстна змінна.

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