Обновляемые представления
Представление может быть обновляемым и только для чтения.Если представление обновляемое, то данные, полученные при обращении к такому представлению, можно изменить при помощи DML операторов INSERT
, UPDATE
, DELETE
, UPDATE OR INSERT
, MERGE
.Изменения, выполняемые над представлением, применяются к базовой таблице(ам).
Представление только для чтения можно сделать обновляемым при помощи вспомогательных триггеров.После того как на представлении будет определён один или несколько триггеров, то изменения не будут автоматически попадать в базовую таблицу, даже если перед этим представление было обновляемым.В этом случае ответственность за обновление (удаление или вставку) записей базовых таблиц, лежит на программисте, определяющем триггеры.
Для того чтобы представление было обновляемым, необходимо выполнение следующих условий:
-
оператор выборки
SELECT
обращается только к одной таблице или одному изменяемому представлению; -
оператор выборки
SELECT
не должен обращаться к хранимым процедурам; -
все столбцы базовой таблицы или обновляемого представления, которые не присутствуют в данном представлении, должны удовлетворять одному из следующих условий:
-
позволять значение
NULL
-
NOT NULL
столбцы должны иметь значение по умолчанию -
значение
NOT NULL
столбцов должны быть инициализированы в триггерах базовых таблиц
-
-
оператор выборки
SELECT
не содержит полей определённых через подзапросы или другие выражения; -
оператор выборки
SELECT
не содержит полей определённых через агрегатные функции (MIN
,MAX
,AVG
,COUNT
,LIST
), статистические функции (CORR
,COVAR_POP
,COVAR_SAMP
и др.), функции линейной регрессии (REGR_AVGX
,REGR_AVGY
и др.) и все виды оконных функций; -
оператор выборки
SELECT
не содержит предложенийORDER BY
,GROUP BY
,HAVING
; -
оператор выборки
SELECT
не содержит ключевого словаDISTINCT
и ограничений количества строк с помощьюROWS
,FIRST
/SKIP
,OFFSET
/FETCH
.