DeepEdit!

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

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Определение DML-действия внутри триггера

Oracle предлагает набор функций (называемых также операционными директивами), которые позволяют определить, какое DML-действие вызвало запуск текущего триггера. Каждая такая функция возвращает TRUE или FALSE.
INSERTING
Возвращает TRUE, если триггер был запущен в ответ на вставку в таблицу, с которой связан триггер, и FALSE - в противном случае.
UPDATING
Возвращает TRUE, если триггер был запущен в ответ на обновление таблицы, с которой связан триггер, и FALSE - в противном случае.
DELETING
Возвращает TRUE, если триггер был запущен в ответ на удаление из таблицы, с которой связан триггер, и FALSE - в противном случае.
Используя эти директивы, можно создать один общий триггер, который будет объединять действия, необходимые для различных видов операций.
Триггеры DDL
Oracle позволяет определить триггеры, которые будут запускаться в ответ на исполнение операторов языка DDL (Data Definition Language - язык определения данных). Попросту говоря, оператор DDL - это любой оператор SQL, используемый для создания или изменения объекта базы данных, такого как таблица или индекс. Приведем несколько примеров операторов DDL:
CREATE TABLE
ALTER INDEX
DROP TRIGGER
Каждый из этих операторов приводит к созданию, изменению или удалению объекта базы данных.
Синтаксис создания таких триггеров практически совпадает с синтаксисом создания триггеров DML, отличие лишь в запускающих их событиях и в том, что триггеры DDL не применяются к отдельным таблицам.
Создание триггера DDL
Для создания (или пересоздания) триггера DDL используйте такую конструкцию:


Описание элементов объявления приведено в таблице:
Строки Описание
Сообщает о том, что создается триггер с указанным именем. Предложение OR REPLACE является необязательным. Но если триггер уже существует, а REPLACE отсутствует, то попытка создать триггер заново приведет к возникновению старой доброй ошибки ORA-4081.
Это очень важная строка. Она определяет, должен ли триггер запускаться до, после или вместо определенного DDL-события*, а также должен ли он запускаться для всех операций над базой данных или только в рамках текущей схемы. Имейте в виду, что опция INSTEAD OF доступна только в версии Oracle9i Release 1 и выше.
Необязательное предложение WHEN, которое позволяет определить логику, позволяющую избежать ненужного исполнения триггера.
Рассмотрим пример триггера, выполняющего роль необученного ин- форматора-«глашатая», объявляющего о создании всех объектов:
4-7 В этих строках приводится PL/SQL-содержимое триггера.
 









jAntivirus