Vues modifiables
Une vue peut être mise à jour ou en lecture seule. Si une vue peut être mise à jour, les données auxquelles elle donne accès peuvent être modifiées à l'aide des opérateurs DML INSERT
, UPDATE
, DELETE
, UPDATE OR INSERT
, MERGE
. Les modifications effectuées sur la vue sont appliquées à la ou aux tables sous-jacentes.
Une vue en lecture seule peut être mise à jour à l'aide de déclencheurs auxiliaires. Une fois qu'un ou plusieurs déclencheurs sont définis sur une vue, les changements ne sont pas automatiquement propagés à la table de base, même si la vue pouvait être mise à jour auparavant. Dans ce cas, la responsabilité de la mise à jour (suppression ou insertion) des entrées de la table de base incombe au programmeur qui a défini les triggers.
Les conditions suivantes doivent être remplies pour qu'une vue puisse être mise à jour :
L'instruction de sélection
SELECT
n'accède qu'à une seule table ou une seule vue qui peut être modifiée ;L'instruction de sélection
SELECT
ne doit pas accéder aux procédures stockées ;Toutes les colonnes de la table de base ou de la vue actualisable qui ne sont pas présentes dans une vue donnée doivent satisfaire à l'une des conditions suivantes
autoriser la valeur "NULL
Les colonnes
NOT NULL
doivent avoir une valeur par défaut.Les colonnes
NOT NULL
doivent être initialisées dans les triggers de la table de base.
L'instruction de sélection
SELECT
ne contient pas de champs définis par des sous-requêtes ou d'autres expressions ;L'instruction de sélection
SELECT
ne contient pas les champs définis par les fonctions d'agrégation (MIN
,MAX
,AVG
,COUNT
,LIST
), les fonctions statistiques (CORR
,COVAR_POP
,COVAR_SAMP
etc.), les fonctions de régression linéaire (REGR_AVGX
,REGR_AVGY
etc.) et toutes sortes de fonctions de fenêtre ;L'instruction de sélection
SELECT
ne contient pas de phrasesORDER BY
,GROUP BY
,HAVING
;L'instruction de sélection
SELECT
ne contient pas le mot-cléDISTINCT
et les restrictions sur le nombre de lignes utilisantROWS
,FIRST
/SKIP
,OFFSET
/FETCH
.