Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции2011.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.86 Mб
Скачать

2. Типы триггеров

Триггеры делятся на три основных типа: триггеры DML, триггеры замещения и системные триггеры.

Триггеры DML

Триггер DML активизируется оператором DML, и тип триггера определяется типом этого оператора. Триггеры DML задаются для операций ведения, обновления и удаления информации (INSERT, UPDATE, DELETE). Они активизируются к или после операции, на уровне строки или оператора.

Операторный триггер может активизироваться операторами нескольких видов. Например, Update Major Stats срабатывает на операторов INSERT, UPDATE и DELETE. Активизирующее событие указывает одну или несколько операций DML, что вызывают выполнение триггера.

Триггеры замещения (instead) можно создавать только для представлений (либо объектных, либо реляционных). В отличие от триггеров DML, которые выполняются как добавление к операторам DML, триггеры замещения выполняются вместо операторов DML, что вызывают их срабатывание. Триггеры замещения должны быть строчными триггерами.

Системный триггер активизируется не на операцию DML, выполняемую над таблицей, а на системное событие, например, на запуск или остановку базы данных. Системные триггеры срабатывают и на операции DDL, такие как создание таблицы.

Создание триггеров dml

Существует 12 возможных видов: 3 оператора х 2 моменты времени х 2 уровня. Ниже приведены правила правильных триггеров DML:

  • До выполнения операции обновления на операторном уровне

  • После выполнения операции введения на уровне строк

  • До выполнения операции удаления на уровне строк

Кроме того, триггер может активизироваться несколькими типами операторов DML, выполняемых над конкретной таблицей: например, INSERT и UPDATE. Код триггера выполняется вместе с активизирующим оператором как часть одной транзакции.

Для таблицы можно создать любое число триггеров каждого вида, в том числе несколько триггеров определенного DML-типа. Например, можно описать два операторных триггера AFTER DELETE. Триггеры одного и того же типа будут срабатывать в порядке очереди.

Порядок активизации триггеров DML

Триггеры активизируются при выполнении оператора DML. Алгоритм выполнения оператора DML такой:

1. Выполняются операторные триггеры BEFORE (при их наличии).

2. Для каждой строки, на которую влияет оператор:

а) выполняются строчные триггеры BEFORE (при их наличии);

б) выполняется собственно оператор;

в) выполняются строчные триггеры AFTER (при их наличии).

3. Выполняются операторные триггеры AFTER (при их наличии).

Создание триггеров замещения

В отличие от триггеров DML, которые срабатывают как дополнение к операции INSERT, UPDATE или DELETE (либо к, либо после них), триггеры замещения активизируются вместо операций DML. К тому же триггеры замещения создаются только для представлений, тогда как триггеры DML — для таблиц. Триггеры замещения используются в двух случаях:

Для того, чтобы сделать представление таким, что модифицируется, если иначе это сделать нельзя.

Для модификации столбцов в столбце вложенной таблицы представления.

Создание системных триггеров

Системные триггеры активизируются событиями двух видов: DDL и базы данных. К событиям DDL относятся операторы CREATE, ALTER и DROP, а к событиям базы данных — запуск /остановка сервера, регистрация/отключение пользователя и ошибка сервера. Синтаксис создания системного триггера:

Таблица 4.1 – Системные события DDL и базы данных

Событие

Допустимое время выполнения

Описание

STARTUP

AFTER

Активируется при запуске экземпляру базы данных

SHUTDOWN

BEFORE

Активируется при остановке экземпляру базы данных. Это событие не активирует триггер, если БД останавливается аварийно

SERVERERROR

AFTER

Активируется при возникновении ошибки

LOGON

AFTER

Активируется после успешного соединения пользователя с базой данных

LOGOFF

BEFORE

Активируется перед отключением пользователя

CREATE

BEFORE, AFTER

Активируется к или после создания объекта схемы

DROP

BEFORE, AFTER

Активируется к или после удаления объекта схемы

ALTER

BEFORE, AFTER

Активируется к или после изменения объекта схемы

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]