ВУЗ:
Составители:
Рубрика:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 41
- 42
- 43
- 44
- 45
- …
- следующая ›
- последняя »