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

Триггеры в PL / SQL

Понятие триггера

Виды триггеров в PL / SQL Работа с триггерами в Oracle

Триггер в PL/SQL

Триггер – это модуль PL / SQL, который хранится в БД и (если он включен) автоматически выполняется (срабатыва- ет) в ответ на указанное событие.

TRIGGER имя_триггера триггерное_событие

[ ограничение_триггера ] BEGIN

инициированное_действие;

END;

Именование триггеров

Имена триггеров должны быть уникальными среди всех триггеров в той же схеме.

Имена триггеров не обязаны быть уникальными по отношению к другим объектам схемы (таких как таблицы, обзоры, процедуры).

Таблица и триггер могут иметь одно и то же имя (хотя, во избежание путаницы, это делать не рекомендуется).

Срабатывание триггера (1)

Если триггер во включенном состоянии, то триггерное событие вызывает выполнение триггерного действия, если ограничение триггера либо TRUE или опущено.

Триггерное событие может быть связано с таблицей, пред- ставлением, схемой или базой данных. Это может быть:

оператор DML (INSERT, UPDATE, DELETE);оператор DDL (CREATE, DROP, ALTER);

операция базы данных (SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN).

Срабатывание триггера (2)

Если триггер в выключенном состоянии, то триггерное событие не вызывает выполнение триггерного действия, если ограничение триггера TRUE или опущено.

По умолчанию, триггер создается во включенном состоя- нии. Можно отключить включенный триггер, и включить отключенный триггер.

В отличие от подпрограммы, триггер не может быть выз- ван напрямую. Вызывается только инициирующим собы- тием. Нельзя знать, что триггер выполняется, если не возникает необрабатываемая ошибка.

Триггерное событие (1)

Определяет, когда сработает триггер: до (BEFORE) или после (AFTER) наступления триггерного события (выпол- нения запускающего оператора).

BEFORE-триггер – выполняется до проверок ограничений на строки, затрагиваемые триггерным событием. Строки не блокируются.

AFTER-триггер – триггер выполняется после того, как запускающий оператор завершит свою работу и будут выполнены проверки всех ограничений. Затрагиваемые строки блокируются на время выполнения триггера.

Триггерное событие (2)

Часть кода между DECLARE и END имя_триггера

обычный базовый блок PL/SQL.

Различные триггерные события можно комбинировать с помощью оператора OR:

DELETE OR INSERT остальные_операторы

При использовании UPDATE можно указать список столбцов:

UPDATE ОF столбец_1, столбец_2, ...

Триггерное ограничение

Триггерное_ограничение – одно и более дополнительных условий, которые должны быть выполнены для срабатывания триггера.

FOR EACH ROW указывает на необходимость выполнить тело триггера для каждой строки, затрагиваемой запускающим оператором (строчный триггер).

Если FOR EACH ROW отсутствует, то при наступлении триггерного события триггер выполняется только один раз (операторный триггер).

Виды триггеров (1)

Простой триггер может срабатывать в одной из времен- ных точек:

перед выполнением триггерного события (триггер BEFORE уровня оператора);

после выполнения триггерного события (триггер AFTER уровня оператора);

перед каждой строкой, затрагиваемой событием (триггер BEFORE уровня строки);

после каждой строки, затрагиваемой событием (триггер AFTER уровня строки).

Виды триггеров (2)

Составные триггеры могут срабатывать в нескольких точках синхронизации.

Триггер INSTEAD OF определяется на представлении. Его инициирующим событием является оператор DML. Вместо выполнения оператора DML, Oracle выполняет INSTEAD OF из триггера.

Системный триггер определяется на схеме или БД. Триггер на схеме срабатывает для событий, связанных с владельцем схемы (текущим пользователем). Триггер на БД срабатывает для событий, связанных со всеми пользователями.