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 phrases ORDER 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 utilisant ROWS, FIRST/SKIP, OFFSET/FETCH.