Что такое триггеры в PL/SQL Oracle
Триггеры — это именованные программные блоки, выполняемые в ответ на происходящие в базе данных события. Они относятся к числу важнейших элементов профессионально спроектированных приложений Oracle и обычно используются для выполнения следующих действий:
- Проверка вносимых в таблицы изменений. Поскольку логика проверки данных непосредственно связана с конкретным объектом базы данных, триггеры гарантируют ее строгое выполнение и соблюдение.
- Автоматизация сопровождения базы данных. Триггеры, автоматически выполняемые при загрузке и выгрузке базы данных, для выполнения операций инициализации и очистки. Это значительно удобнее, чем создавать для этих операций внешние по отношению к базе данных сценарии.
- Точная настройка ограничений на выполнение административных операций. При помощи триггеров можно проверить, допускается ли выполнение определенной операции над конкретным объектом базы данных (например, удаление или модификация таблицы). Когда правила проверки реализованы в виде триггеров, обойти их очень трудно, если вообще возможно.
Существуют пять видов событий, с которыми можно связывать триггеры:
- Команды DML (Data Manipulation Language). Триггеры DML запускаются в ответ на вставку, обновление и удаление строки таблицы базы данных. Их можно использовать с целью проверки значений, устанавливаемых по умолчанию, выполнения аудита изменений и даже запрета определенных команд DML.
- Команды DDL (Data Definition Language). Триггеры DDL запускаются в ответ на выполнение команд DDL — например, при создании таблицы. С их помощью можно выполнять аудит и запрещать определенные операции.
- События базы данных. Триггеры событий базы данных используются при запуске и остановке базы данных, при подключении и отключении сервера, а также при возникновении ошибок Oracle.
- Триггеры INSTEAD OF. Замещающие триггеры (триггеры INSTEAD OF) являются альтернативой триггерам DML. Они запускаются непосредственно перед операциями вставки, обновления, удаления, и их код определяет, какие действия следует выполнить вместо соответствующей операции DML. Триггеры INSTEAD OF управляют операциями над представлениями, но не над таблицами. С их помощью можно преобразовывать необновляемые представления в обновляемые, изменяя при необходимости их поведение.
- Приостановленные команды. Если в ходе выполнения команды возникла проблема доступности пространства (недостаточно табличного пространства или исчерпана квота), Oracle может перевести ее в режим приостановления до тех пор, пока проблема не будет решена. С данным событием можно связать триггер, который автоматически уведомляет пользователя о проблеме или даже самостоятельно устраняет ее.