подмножеством данных в таблице. Это подмножество может быть горизонтальной секций (ограничение по строкам), вертикальной секцией (ограничение по столбцам) или горизонтально-вертикальной секцией. Управление доступом к таблице осуществляется через представление, которое традиционно не могло обновляться (если только эти ограничения доступа были реализованы посредством соединений, а не подзапросов). Кроме того, при помощи триггеров INSTEAD OF можно по некоторым условиям ограничивать определенные операции или вводить в таблицу значения, которые не определены в представлении.
Разработчики, работающие с Oracle Forms, часто использовали представления предсоединенных (pre-join) таблиц как основу блока, в качестве альтернативы построению блока на одной из таблиц и формированию дорогостоящих post-query-обращений к серверу. Недостаток этого решения заключался в том, что разработчику приходилось создавать ряд "ON-" триггеров, чтобы отменить стандартные функциональные возможности Oracle Forms. При использовании триггеров INSTEAD OF форма не обязана знать, что она работает с представлением, потому' что операции INSERT, DELETE и UPDATE осуществляются на сервере.
Предупреждение:
Как мы упоминали выше, невозможно написать триггер базы данных, срабатывающий в момент блокировки (LOCK), поэтому, хотя представление и можно сделать обновляемым, инкапсулированного способа запраши-вания блокировки набора строк, из которого строится любая строка представления, не существует. Следовательно, обновлять такие представления из Oracle Forms в стандартном режиме блокировки невозможно. Единственно допустимые варианты в триггере ON LOCK уровня формы — явно блокировать строку или вообще ничего не блокировать. Оказавшись перед таким выбором, мы предпочли бы второй вариант, а не строили бы догадки об определении представления, спрятанном где-то глубоко в форме.
Пример триггера
Чтобы получить некоторое представление о том, сколько воображения разработчик может вложить в создание триггера INSTEAD OF, давайте рассмотрим представление-сводку, содержащую сумму зарплат всех служащих по отделам:
CREATE VIEW totsal
( dname
, sal_amount
) AS SELECT d.dname
, SOM(e.sal) FROM emp  e
, dept d
WHERE d.deptno = e.deptno GROUP BY d.dname;
3. Некоторые усовершенствования в OracleS	31