Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с Oracle / Триггеры в PL SQL.ppt
Скачиваний:
8
Добавлен:
28.06.2021
Размер:
905.73 Кб
Скачать

Виды триггеров (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-триггером.