Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / LA / Триггеры.doc
Скачиваний:
45
Добавлен:
16.04.2013
Размер:
81.41 Кб
Скачать

Триггеры

Триггер - это блок PL/SQL, выполняемый неявно каждый раз, когда происходит конкретное событие.

Типы событий запускающих триггеры:

  1. DML-события, которые происходят при выполнении инструкций INSERT, UPDATE или DELETE.

  2. DDL-события, которые происходят при выполнении инструкцийCREATE,ALTERилиDROP.

  3. Другие события уровня базы данных.

Примечание. Триггеры типа (1) могут быть созданы только для таблиц; создать триггер для представления невозможно. Но если DML-операция выполняется над представлением, то срабатывают триггеры таблиц, лежащих в основе этого представления.

Синтаксис создания триггеров DML-события - типа (1).

CREATE [OR REPLACE] TRIGGER имя_триггера

{BEFORE | AFTER | INSTEAD OF } событие_триггера

[OR событие_2 [OR событие_3]]

ON {таблица_или_представление |

NESTED TABLE столбец_вложенной_таблицы

OF представление}

[REFERENCING [OLD AS старая][NEW AS новая]

[PARENT AS родитель] ]

[FOR EACH ROW ][WHEN условие_триггера]

тело_триггера;

END имя_триггера;

Синтаксис создания триггеров типа (2) и (3).

CREATE [OR REPLACE] TRIGGER имя_триггера

{BEFORE | AFTER} событие_триггера

ON [DATABASE | схема]

[WHEN условие_триггера]

тело_триггера;

END имя_триггера;

Тело триггера – это обычный блок PL/SQLкода, который может содержать не только исполняемую секцию, но и секцию объявлений, и секцию исключений.

Триггеры BEFOREиAFTERзапускаются соответственно до и после наступления событий. ТриггерыAFTERнемного быстрее, чем триггерыBEFORE, поскольку они манипулируют данными уже считанными из БД.

События, вызывающие срабатывания триггера собраны в табл. 1. Предложение WHENопределяет дополнительное условие запуска триггера. В этом условии не разрешается использовать хранимые функции и методы объектов.

Таблица 1. События запускающие тригеры.

Событие

Описание. Событие происходит тогда, когда …

DML-события

INSERT

… в таблицу или представление добавляется строка

UPDATE

… инструкция UPDATEизменяет таблицу или представ.

UPDATE OF

имя_поля

… обновляется указанное поле таблицы, причём для каждой строки – отдельное событие.

DELETE

… строка удаляется из таблицы или представления. При выполнении инструкцииTRUNCATEэто событие не происходит.

DDL-события

DDL

… возникает любое из следующих DDL- событий.

ALTER

… инструкция ALTERизменяет объект базы данных. В этом контексте объекты подобны таблицам или пакетам (вALL_OBJECTS). Может применяться к отдельной схеме или ко всей базе данных.

ANALIZE

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

ASSOCIATE

STATISTICS

… база данных ассоциирует тип статистики с объектом базы данных.

AUDIT

… база данных записывает операцию аудита.

COMMENT

… изменяется комментарий к объекту базы данных.

CREATE

… создаётся объект базы данных. Не происходит при выполнении инструкцииCREATE CONTROLFILE

DIASSOCIATE

STATISTICS

… база данных отсоединяет тип статистики от объекта базы данных.

DROP

… инструкция DROPудаляет объект из БД. В этом контексте объекты подобны таблицам или пакетам (вALL_OBJECTS). Может применяться к отдельной схеме или ко всей базе данных.

GRANT

… назначается привилегия системе, роли или объекту.

NOAUDIT

… база данных выполняет инструкцию NOAUDIT.

RENAME

… инструкция RENAMEизменяет имя объекта БД.

REVOKE

… аннулируется привилегия системы, роли или объекта.

TRUNCATE

… выполняется инструкция TRUNCATEдля очистки таблицы или кластера от ненужных данных.

Другие события уровня базы данных.

SERVERERROR

… регистрируется сообщение об ошибке сервера. <Только для триггеров AFTER.>

LOGON

… создаётся сеанс (пользователь подключается к БД). <Только для триггеров AFTER.>

LOGOFF

… закрывается сеанс (пользователь отключается от БД). <Только для триггеров BEFORE.>

STARTUP

… открывается БД. <Только для триггеров AFTER.>

SHUTDOWN

… закрывается БД. <Только для триггеров BEFORE.>

SUSPEND

… из-за ошибки сервера зависает транзакция.

Примечание. Триггер SHUTDOWNне запускается при аварийном закрытии БД событиемSHUTDOWNABORT.

Соседние файлы в папке LA