Основы языка PL/SQL. Гаршина В.В - 43 стр.

UptoLike

Составители: 

43
где trigger_name – имя триггера, table – имя таблицы, condition – дополни-
тельное условие срабатывания триггера. Предложение BEFORE/AFTER
указывает на характер выполнения триггера (до / после произведенной
операции); INSERT|UPDATE| DELETE – указывает DML-операцию, кото-
рая обеспечивает вызов триггера (есть возможность указания нескольких
операций через ключевое слово OR); модификатор FOR EACH ROW ука-
зывает, что триггер должен выполняться для каждой измененной строки
таблицы (в противном случае триггер
выполняется один раз за операцию).
В триггерах FOR EACH ROW имеется возможность доступа к данным
строки через внешние переменные new и old (измененные, и данные до из-
менения соответственно).
Пример триггера:
CREATE OR REPLACE TRIGGER salary_changes
BEFORE DELETE OR INSERT OR UPDATE
ON Emp_tab
FOR EACH ROW
WHEN (new.Empno > 0)
DECLARE
sal_diff number;
BEGIN
sal_diff := :new.sal - :old.sal;
dbms_output.put(’Old salary: ’
|| :old.sal);
dbms_output.put(’ New salary: ’
|| :new.sal);
dbms_output.put_line(’ Difference ’
|| sal_diff);
END;
Триггеры INSTEAD OF предназначены для реализации пользова-
тельской логики во время операций INSERT, UPDATE или DELETE, при-
мененных к представлениям. Триггеры INSTEAD OF обязательно
отраба-
тывают для каждой изменяемой строки (режим FOR EACH ROW). Пример
использования триггеров INSTEAD OF:
где trigger_name – имя триггера, table – имя таблицы, condition – дополни-
тельное условие срабатывания триггера. Предложение BEFORE/AFTER
указывает на характер выполнения триггера (до / после произведенной
операции); INSERT|UPDATE| DELETE – указывает DML-операцию, кото-
рая обеспечивает вызов триггера (есть возможность указания нескольких
операций через ключевое слово OR); модификатор FOR EACH ROW ука-
зывает, что триггер должен выполняться для каждой измененной строки
таблицы (в противном случае триггер выполняется один раз за операцию).
В триггерах FOR EACH ROW имеется возможность доступа к данным
строки через внешние переменные new и old (измененные, и данные до из-
менения соответственно).
       Пример триггера:

     CREATE OR REPLACE TRIGGER salary_changes
     BEFORE DELETE OR INSERT OR UPDATE
       ON Emp_tab
     FOR EACH ROW
     WHEN (new.Empno > 0)
     DECLARE
       sal_diff number;
     BEGIN
       sal_diff := :new.sal - :old.sal;
       dbms_output.put(’Old salary: ’
                        || :old.sal);
       dbms_output.put(’ New salary: ’
                        || :new.sal);
       dbms_output.put_line(’ Difference ’
                        || sal_diff);
     END;

      Триггеры INSTEAD OF предназначены для реализации пользова-
тельской логики во время операций INSERT, UPDATE или DELETE, при-
мененных к представлениям. Триггеры INSTEAD OF обязательно отраба-
тывают для каждой изменяемой строки (режим FOR EACH ROW). Пример
использования триггеров INSTEAD OF:


                                      43