В зависимости от активизирующего события транзакционное поведение системного триггера меняется. Системный триггер срабатывает или как отдельная транзакция, завершающаяся после успешного выполнения триггера, или как часть текущей транзакции пользователя. Триггеры
STARTUP, SHUTDOWN, и LOGON активизируются как
отдельные транзакции, а триггеры LOGOFF и DDL — как часть текущей транзакции.
Важно отметить, что работа, выполняемая триггером, как правило, завершается оператором COMMIT. В случае с триггером DDL текущая транзакция (а именно оператор CREATE, ALTER или DROP) завершается автоматически, что завершает и действие триггера. Результаты работы триггера LOGOFF также фиксируются в заключительной транзакции сеанса.
Внимание
Системные триггеры практически всегда завершаются оператором COMMIT, поэтому объявление их автономными не будет иметь никакого эффекта.
Системные триггеры и предложение WHEN
В системных триггерах, как и в триггерах DML, для указания условия активизации можно применять конструкцию WHEN (когда). Однако существует ряд ограничений на виды условий, указываемых в системных триггерах:
• В триггерах STARTUP и SHUTDOWN никаких условий ставить нельзя. Тест ERRNO в триггерах SERVERERROR можно использовать для
выявления только конкретной ошибки.
В триггерах LOGON и LOGOFF можно проверять идентификатор и имя пользователя с помощью тестов и USERNAME.
В триггерах DDL можно проверять тип и имя модифицируемого объекта, а также идентификатор и имя пользователя.
Другие аспекты использования триггеров
В этом разделе обсуждаются такие вопросы, как пространство имен триггеров, ограничения на применение триггеров, различные типы тел триггеров и привилегии, имеющие отношение к триггерам.
< Предыдущая | Следующая > |
---|