- •Триггеры в PL / SQL
- •Триггер в PL/SQL
- •Именование триггеров
- •Срабатывание триггера (1)
- •Срабатывание триггера (2)
- •Триггерное событие (1)
- •Триггерное событие (2)
- •Триггерное ограничение
- •Виды триггеров (1)
- •Виды триггеров (2)
- •Виды триггеров (3)
- •Проектирование триггеров (1)
- •Проектирование триггеров (2)
- •Создание триггеров
- •Псевдозаписи OLD и NEW
- •Пример триггера - 1
- •Создание таблицы CATALOGS_LOG
- •Создание триггера CAT_CHANGE_TRIGGER
- •Результаты работы триггера
- •Пример триггера - 2
- •Создание последовательности CATALOGS_SEQ
- •Создание триггера NEW_CATALOG_TRIGGER (1)
- •Создание триггера NEW_CATALOG_TRIGGER (2)
- •Создание триггера NEW_CATALOG_TRIGGER (3)
- •Создание триггера NEW_CATALOG_TRIGGER (4)
- •Результаты работы триггера
- •Пример триггера - 3
- •Пример триггера - 3
- •Пример триггера - 4
- •Пример триггера - 4
- •Пример триггера - 4
- •Пример создания триггера INSTEAD OF
- •Создание представления USER_NAME
- •Просмотр представления USER_NAME
- •Создание триггера
- •Проверка работы триггера
- •Пример использования системных триггеров
- •Создание таблицы OLEG_USERS_LOG
- •Создание триггера OLEG_LOGON_TRIGGER
- •Создание триггера OLEG_LOGOFF_TRIGGER
- •Проверка работы триггеров
- •Изменение триггеров (1)
- •Изменение триггеров (2)
- •Включение и выключение триггеров
- •О компиляции и зависимостях триггеров (1)
- •О компиляции и зависимостях триггеров (2)
- •О компиляции и зависимостях триггеров (3)
- •Удаление триггеров
- •Модификация триггеров
- •Тонкости, касающиеся триггеров (1)
- •Тонкости, касающиеся триггеров (2)
Виды триггеров (3)
Вариант использования триггеров – обеспечение бизнес- правил, применяемых ко всем клиентским приложениям.
Пусть данные, добавленные в таблицу должны иметь опре- деленный формат, и многие клиентские приложения могут добавить данные в этой таблице.
Триггер на таблице может обеспечить правильный формат данных. Триггер выполняется всякий раз при добавлении данных в таблицу.
Код, следящий за соблюдением правил может быть сохранен в триггере, а не в каждом приложении.
Проектирование триггеров (1)
Используйте триггеры для того, чтобы гарантировать, что при выполнении определенной операции будут выполнены связанные с ней действия.
Используйте триггеры только для глобальных, центра- лизованных операций, которые должны быть выполне- ны для оператора, независимо от того, какой пользова- тель (приложение) выдает этот оператор.
Не определяйте триггеров, дублирующих возможности, встроенные в ORACLE (например, триггеры для правил целостности, которые реализованы посредством декларативных ограничений целостности).
Проектирование триггеров (2)
Не создавайте рекурсивных триггеров. Создание тригге-ра AFTER для оператора UPDATE по таблице, который сам выдает оператор UPDATE по этой же таблице, приведет к рекурсивному возбуждению триггера вплоть до переполнения числа триггеров.
Т. к. триггер компилируется, когда возбуждается впер-вые (и при последующих возбуждениях, если он был вытеснен из разделяемой области контекста), следует ограничивать размер триггеров (~ 60 строк).
Если триггер должен исполняться многократно, лучше включить код, исполняемый триггером, в хранимую процедуру (хранится в откомпилированной форме).
Создание триггеров
Для создания триггеров используют:инструмент SQL Developer Create Trigger;
оператор DDL CREATE TRIGGER.
По умолчанию триггер создается во включенном состоя- нии. Чтобы создать триггер в отключенном состоянии, используют оператор CREATE TRIGGER с опцией DISABLE.
Чтобы создавать триггеры, необходимо иметь соответствующие права.
Псевдозаписи OLD и NEW
Когда триггер срабатывает на уровне строк, система созда- ет две псевдозаписи OLD и NEW:
Для INSERT-триггера OLD не содержит значений, NEW содержит новые значения.
Для UPDATE-триггера OLD содержит старые значения, NEW содержит новые значения.
Для DELETE-триггера OLD содержит старые значения, NEW не содержит значений.
Для ссылки на псевдозапись ставят двоеточие перед ее име- нем : OLD или : NEW . В триггерном ограничении имена OLD и NEW используются без двоеточий.
Пример триггера - 1
Создадим триггер CAT_CHANGE_TRIGGER, добавляющий строку в таблицу CATALOGS_LOG когда оператор INSERT, UPDATE или DELETE изменяет таблицу.
Триггер добавляет строку после выполнения триггерного оператора и использует условные предикаты INSERTING, UPDATING и DELETING, чтобы определить, какой из операторов DML привел к срабатыванию триггера.
CAT_CHANGE_TRIGGER является триггером уровня оператора и AFTER-триггером.
Создание таблицы CATALOGS_LOG
Создание триггера CAT_CHANGE_TRIGGER
Результаты работы триггера
Пример триггера - 2
Последовательность CATALOGS_SEQ генерирует первич- ные ключи для таблицы CATALOGS. Но эти первичные ключи не будут автоматически вставлены в таблицу.
Создадим триггер NEW_CATALOG_TRIGGER, который срабатывает до вставки строки в таблицу и генерирует уни- кальный номер для первичного ключа. Триггер срабатыва- ет для каждой строки, затронутой оператором INSERT.
NEW_EVALUATION_TRIGGER является триггером уров- ня строк и BEFORE-триггером.