Тело триггера является блоком PL/SQL (в разрешены другие типы тел триггеров, см. ниже). Любой оператор, выполнение которого разрешено в блоке PL/SQL, можно выполнить и в теле триггера при условии соблюдения следующих ограничений:
• В триггере нельзя использовать операторы управления транзакциями: COMMIT, ROLLBACK, SAVEPOINT и SET TRANSACTION. Компилятор PL/SQL позволит создать триггер, содержащий один из этих операторов, но при активизации триггера будет выдано сообщение об ошибке. Дело в том, что срабатывание триггера является частью процесса выполнения активизирующего оператора, т.е. частью той транзакции, которая охватывает активизирующий оператор.
Когда этот оператор завершается или откатывается, все то, что было выполнено триггером, также завершается или откатывается (в Огас1е8г можно создать триггер, исполняющийся как автономная транзакция, и его работа будет завершаться или откатываться независимо от состояния активизирующего оператора, см. главу 4).
• В процедурах и функциях, которые вызываются в теле триггера, тоже нельзя задавать никаких операторов управления транзакциями (если они не объявлены автономными в Oracle8 г и выше).
• В теле триггера нельзя объявлять переменные типов LONG и LONG RAW. Кроме того, в записях new и : old нельзя ссылаться на столбцы типов LONG и LONG RAW таблицы, для которой определен триггер.
• ВОгас1е8 и выше из тел триггеров можно обращаться к столбцам типа LOB (большие объекты), но модифицировать значения этих столбцов нельзя. Это ограничение действует и для столбцов-объектов.
Не ко всем таблицам можно обращаться из тела триггера. Для некоторых триггеров и при наличии определенных ограничений (constraints), налагаемых на таблицы, таблицы могут быть изменяющимися (mutating) (см. ниже).
< Предыдущая | Следующая > |
---|