Обновляемые представления
Представление может быть обновляемым и только для чтения.Если представление обновляемое, то данные, полученные при обращении к такому представлению, можно изменить при помощи 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.