DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

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

Как было показано выше, триггеры DML и триггеры замещения срабаты­вают на события DML (или вместо них), а именно на операторы INSERT, UPDATE и DELETE. Системные же триггеры активизируются событиями двух видов: DDL и базы данных. К событиям DDL относятся операторы CREATE, ALTER и DROP, а к событиям базы данных — запуск/останов сервера, регистрация/отключение пользователя и ошибка сервера. 
В таблице 11.4 описаны события DDL и базы данных вместе с указани­ем допустимого момента их обработки (BEFORE или AFTER). Системные триггеры замещения создавать нельзя. Для оператора TRUNCATE не предусмотрено событие базы данных.
Внимание
Для создания системного триггера необходимо иметь системную привилегию ADMINISTER DATABASE TRIGGER (см. ниже раздел "Привилегии на триггеры").
Триггеры базы данных и триггеры схемы
Системный триггер можно определить на уровне базы данных или на уровне схемы. Триггер базы данных срабатывает каждый раз при наступ­лении активизирующего события, а триггер схемы — только когда активи­зирующее событие происходит в указанной схеме. Уровень системного триггера определяют ключевые слова DATABASE и SCHEMA. Если с клю­чевым словом SCHEMA не указана схема, то по умолчанию используется та, которой принадлежит триггер. Предположим, что пользователь UserA
создает следующий триггер:
Внимание

Перед выполнением этих примеров нужно создать пользователей UserA и UserB и предоставить им соответствующие полномочия (см. файл DatabaseScliema. sql),
Как и предполагалось, LogAllConnects активизировался три раза (по разу для каждого из трех соединений), a LogUserAConnects и LogUserBConnects -только по разу.

Внимание
Триггеры STARTUP и SHUTDOWN имеют смысл только на уровне базы данных. Не запрещается создавать их и на уровне схемы, но активизироваться они при этом не будут.
 









jAntivirus