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
.