![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Строковые и операторные триггеры
Синтаксис: 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 – это определяется поле, на которое устанавливаем условие триггера.
|