Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Строковые и операторные триггеры






Синтаксис:

CREATE [OR REPLACE] TRIGGER имя_триггера

BEFORE | AFTER активизирующее_событие ON ссылка_на_таблицу

FOR EACH ROW [WHEN условие_срабатывания]

тело_триггера

 

где активизирующее_событие указывает момент активации триггера BEFORE до срабатывания оператора DML, AFTER после срабатывания оператора DML.

FOR EACH ROW указывает на активацию триггера от воздействия на каждую строку в наборе строк, без этого указателя триггер запускается после или до оператора DML в целом.

 

Порядок активации триггеров в большинстве случаев таков:

- Выполняется операторный триггер BEFORE (при его наличии)

- Для каждой строки, на которую воздействует оператор:

- Выполняется строковый триггер BEFORE (при его наличии).

- Выполняется собственно оператор.

- Выполняется строковый триггер AFTER (при его наличии).

- Выполняется операторный триггер AFTER (при его наличии).

 

Псевдозаписи

При создании строковых триггеров можно использовать псевдозаписи: old и: new. Строковый триггер срабатывает один раз для каждой строки. При этом внутри триггера можно обращаться к строке, обрабатываемой в данный момент времени, применяя псевдозаписи.

 

Например:

CREATE OR REPLACE TRIGGER ADMIN_BOOKS.Trigger1

BEFORE DELETE ON ADMIN_BOOKS.Authors FOR EACH ROW

DECLARE

a ADMIN_BOOKS.Authors.Code_author%TYPE;

b ADMIN_BOOKS.Authors.Name_Author%TYPE;

c ADMIN_BOOKS.Authors.Birthday%TYPE;

BEGIN

a: =: old.Code_author;

b: =: new.Name_Author;

c: =: old.Birthday;

End;

Обращение к псевдозаписям: old и: new должно производиться через имена полей и применимо только к строковым триггерам.

 

Условие WHERE

С его помощью можно заставить триггер работать по условию! Само условие WHERE в триггере применимо к типу строчных триггеров.

Пример:

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

CREATE TABLE ADMIN_BOOKS.Audit_Trigger2(date_oper date, user_name char(20), code_book number(5));

Commit;

Теперь создадим триггер:

CREATE OR REPLACE TRIGGER ADMIN_BOOKS.Trigger2

BEFORE INSERT OR UPDATE OF Title_Book ON ADMIN_BOOKS.Books FOR EACH ROW WHEN (TRIM(new.Title_Book) = '')

DECLARE

 

BEGIN

INSERT INTO ADMIN_BOOKS.Audit_Trigger2 (date_oper, user_name, code_book) VALUES(sysdate, user,: new.code_book);

END Trigger2;

 

Обратите внимание на наличие строки OF Title_Book ON ADMIN_BOOKS.Books – это определяется поле, на которое устанавливаем условие триггера.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.