DeepEdit!

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

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

Ограничения, налагаемые на триггеры

Тело триггера является блоком 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) (см. ниже). 
 









jAntivirus