Триггеры активизируются при выполнении оператора DML. Алгоритм выполнения оператора DML таков:
Выполняются операторные триггеры BEFORE
Для каждой строки, на которую воздействует оператор:
Выполняются строковые триггеры BEFORE
Выполняются строковые триггеры AFTER
Выполняются операторные триггеры AFTER (при их наличии).
В качестве примера создадим различные триггеры UPDATE для таблицы classes. Мы создадим три строковых триггера BEFORE и два операторных триггера AFTER:
При активизации каждого из триггеров будут видны изменения, сделанные предыдущими триггерами, а также изменения в базе данных, внесенные оператором. Для этого каждый триггер выводит значение счетчика (о модульных переменных рассказывается в главе 10).
Порядок, в котором активизируются триггеры одного вида, не определен. Из приведенного примера следует, что каждый триггер видит изменения, вносимые более ранними триггерами. Если порядок важен, следует объединить все операции в один триггер.
Внимание
При создании журнала моментальных снимков таблицы Oracle автоматически создает для нее строковый триггер AFTER ROW, обновляющий этот журнал после каждого оператора DML. Следует учитывать этот факт при создании дополнительного строкового триггера AFTER для данной таблицы. Существуют и другие ограничения на использование триггеров и моментальных снимков (известных как материализованные представления в Oracle). Дополнительная информация содержится в "Oracle Server Replication".
< Предыдущая | Следующая > |
---|