Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Предложение INSTEAD OF

Предложение INSTEAD OFВ дополнение к ключевым словам BEFORE и AFTER может быть определено предложение INSTEAD OF (допустимо только для представлений). В данном случае Oracle выполняет команды триггера вместо самой инструкции. Это может оказаться особенно полезным при работе с необновляемыми представлениями (см. главу 4) для имитации режима работы обновляемого представления. К примеру, нельзя выполнять инструкции DML над представлениями, созданными с использованием предложений GROUP BY или DISTINCT. В то же время триггер INSTEAD OF может содержать специальную логику, которая замещает данное правило путем использования конструкций процедурного языка для выполнения соответствующих инструкций DML. Еще одним дополнительным средством является предложение UPDATE OF. В отличие от стандарта SQL:2003, позволяющего выполнять триггер, только если обновляется любой столбец таблицы, PL/SQL дает возможность указать, при изменении какого именно столбца (или набора столбцов) следует активизировать триггер. Предложение REFERENCING позволяет определить альтернативные коррелирующие префиксы (с помощью ключевых слов OLD и NEW), которые будут применяться для обращения к старым (немодифицированным) и новым (измененным) значениям столбцов.

В следующем примере создается триггер TRBU_PRODUCT, который вставляет строку в специальную таблицу аудита, PRODUCT_AUDIT, при каждом изменении столбца PROD_PRICE_N в таблице PRODUCT. В составе этой информации первичный ключ модифицируемой строки, новая и старая цена, имя пользователя, модифицирующего строку, и штамп времени. Данный триггер вызывается для любой модифицируемой строки таблицы PRODUCT, которая удовлетворяет условию, поэтому если кто-то выполняет инструкцию UPDATE, изменяющую цену пяти товаров, в таблицу PRODUCT_AUDIT будет вставлено пять строк. В целом синтаксис повторяет спецификации стандарта SQL:2003, за исключением некоторых незначительных деталей. К примеру, обычного ключевого слова BEFORE недостаточно — нужно обязательно указать предложение NO CASCADE BEFORE. Также, для создания нового триггера к предложению FOR EACH ROW следует добавить ключевые слова MODE DB2SQL.

Предложение REFERENCING идентично используемому в PL/SQL, однако несмотря на его