
VIEW Oracle SQL : Créer et Utiliser des Vues dans vos Bases de Données
Une VIEW Oracle SQL est un objet de base de données qui agit comme une table virtuelle basée sur le résultat d’une requête SELECT. Utilisée quotidiennement en entreprise, la VIEW Oracle simplifie l’accès aux données complexes, renforce la sécurité et améliore la maintenabilité du code SQL. Dans ce cours, vous découvrirez comment créer, modifier et exploiter efficacement les vues dans Oracle.
Définition et utilisation d’une VIEW en Oracle SQL
Une vue (VIEW) est un objet SQL persistant stocké dans le schéma Oracle, qui encapsule une requête SELECT. Elle ne contient pas de données physiques : à chaque appel, Oracle exécute la requête sous-jacente et retourne les résultats en temps réel.
Pourquoi utiliser une VIEW ?
- Simplification des requêtes complexes : une vue peut masquer des jointures multiples, des sous-requêtes ou des calculs pour offrir une interface de lecture simple aux développeurs ou aux outils de reporting.
- Sécurité des données : en exposant uniquement certaines colonnes ou certaines lignes d’une table, vous contrôlez précisément ce que chaque utilisateur peut consulter, sans modifier les droits sur les tables sources.
- Maintenabilité : si la logique métier évolue (changement de calcul, nouvelle colonne), il suffit de modifier la vue sans toucher à toutes les requêtes qui l’utilisent.
- Abstraction du modèle de données : les applications consommatrices restent indépendantes des évolutions du schéma physique.
En environnement Oracle d’entreprise, on retrouve les vues dans les contextes suivants : reporting financier, portails RH exposant uniquement les données salariales autorisées, couches d’abstraction pour les outils BI (Business Objects, Tableau), ou encore interfaces entre applications métier.
Syntaxe complète de la VIEW Oracle SQL
Voici la syntaxe officielle Oracle pour créer une vue :
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW nom_vue
[(alias_colonne1, alias_colonne2, ...)]
AS
requete_select
[WITH CHECK OPTION [CONSTRAINT nom_contrainte]]
[WITH READ ONLY [CONSTRAINT nom_contrainte]];
Explication des paramètres essentiels
- OR REPLACE : recrée la vue si elle existe déjà, sans nécessiter de DROP préalable. Très utile lors des développements itératifs.
- FORCE : crée la vue même si les tables sources n’existent pas encore (la vue sera invalide jusqu’à leur création). NOFORCE est le comportement par défaut : la création échoue si les objets sources sont absents.
- alias_colonne : permet de renommer les colonnes exposées par la vue, notamment pour les expressions calculées qui n’ont pas de nom implicite.
- WITH CHECK OPTION : pour les vues modifiables, garantit que toute insertion ou mise à jour via la vue respecte le filtre WHERE de la vue (les lignes non visibles ne peuvent pas être créées ou modifiées).
- WITH READ ONLY : interdit toute opération DML (INSERT, UPDATE, DELETE) à travers la vue. Recommandé pour les vues de reporting.
Exemples pratiques de VIEW Oracle SQL
Exemple 1 – Vue de reporting RH
Contexte métier : Le service RH souhaite exposer aux managers une vue des employés de leur département, sans afficher les salaires ni les informations confidentielles.
-- Création d'une vue lisible uniquement
-- Elle masque les colonnes sensibles (salaire, date de naissance)
-- et filtre uniquement les employés actifs
CREATE OR REPLACE VIEW v_employes_actifs AS
SELECT
e.employe_id,
e.nom,
e.prenom,
e.poste,
d.nom_departement,
e.date_embauche
FROM employes e
JOIN departements d ON e.departement_id = d.departement_id
WHERE e.statut = 'ACTIF'
WITH READ ONLY;
-- Utilisation de la vue par un manager
SELECT *
FROM v_employes_actifs
WHERE nom_departement = 'FINANCE'
ORDER BY nom;
Grâce au mot-clé WITH READ ONLY, aucune modification des données n’est possible via cette vue. Le manager ne voit que les colonnes autorisées et uniquement les employés actifs.
Exemple 2 – Vue agrégée pour le suivi des ventes
Contexte métier : Le service commercial a besoin d’un tableau de bord quotidien affichant le chiffre d’affaires mensuel par commercial, calculé depuis la table des commandes.
-- Vue de synthèse des ventes mensuelles par commercial
-- Utilisation d'alias de colonnes pour les expressions calculées
CREATE OR REPLACE VIEW v_ca_mensuel_commercial
(commercial_id, nom_commercial, mois, annee, chiffre_affaires, nb_commandes)
AS
SELECT
c.commercial_id,
c.nom || ' ' || c.prenom, -- Concaténation : alias obligatoire
EXTRACT(MONTH FROM cmd.date_commande),
EXTRACT(YEAR FROM cmd.date_commande),
SUM(cmd.montant_ttc), -- Agrégat : alias obligatoire
COUNT(cmd.commande_id)
FROM commandes cmd
JOIN commerciaux c ON cmd.commercial_id = c.commercial_id
WHERE cmd.statut_commande = 'VALIDEE'
GROUP BY
c.commercial_id,
c.nom || ' ' || c.prenom,
EXTRACT(MONTH FROM cmd.date_commande),
EXTRACT(YEAR FROM cmd.date_commande);
-- Interrogation de la vue pour le mois courant
SELECT nom_commercial, chiffre_affaires, nb_commandes
FROM v_ca_mensuel_commercial
WHERE annee = EXTRACT(YEAR FROM SYSDATE)
AND mois = EXTRACT(MONTH FROM SYSDATE)
ORDER BY chiffre_affaires DESC;
Dans cet exemple, les alias de colonnes sont déclarés directement dans la définition de la vue car les expressions (SUM, concaténation, EXTRACT) ne possèdent pas de nom implicite en Oracle.
Erreurs courantes avec les VIEW Oracle SQL
Erreur : ORA-01779 – Impossible de modifier une colonne mappée sur une table non préservée par clé
Situation : Vous tentez d’effectuer un UPDATE ou un INSERT via une vue basée sur une jointure, et Oracle retourne l’erreur ORA-01779: cannot modify a column which maps to a non key-preserved table.
Cause : Lorsqu’une vue repose sur plusieurs tables jointes, Oracle ne peut modifier les données que dans la table dite « key-preserved », c’est-à-dire celle dont chaque ligne source correspond à au plus une ligne dans le résultat de la vue (généralement la table côté « un » d’une jointure 1-N).
Solution : Plusieurs approches sont possibles :
- Effectuer l’opération DML directement sur la table source concernée.
- Créer un INSTEAD OF TRIGGER sur la vue, qui intercepte les opérations DML et les redirige correctement vers les tables cibles.
- Revoir le design de la vue pour qu’elle ne porte que sur une seule table modifiable, et créer des vues séparées pour chaque table de la jointure.
-- Exemple de INSTEAD OF TRIGGER pour gérer les INSERT sur une vue jointe
CREATE OR REPLACE TRIGGER trg_insert_v_employes
INSTEAD OF INSERT ON v_employes_actifs
FOR EACH ROW
BEGIN
INSERT INTO employes (employe_id, nom, prenom, poste, statut)
VALUES (:NEW.employe_id, :NEW.nom, :NEW.prenom, :NEW.poste, 'ACTIF');
END;
/
Résumé
| Point clé | Détail |
|---|---|
| Objet Oracle | Vue virtuelle, ne stocke pas de données physiques |
| Création | CREATE [OR REPLACE] VIEW ... AS SELECT ... |
| Sécurité | Restriction de colonnes et de lignes accessibles |
| Lecture seule | WITH READ ONLY pour interdire le DML |
| Contrôle DML | WITH CHECK OPTION pour respecter le filtre WHERE |
| Vue invalide | Option FORCE pour créer malgré des objets manquants |
| Vue jointure modifiable | Utiliser un INSTEAD OF TRIGGER |
| Catalogue Oracle | Consultable via USER_VIEWS ou ALL_VIEWS |
Bonnes pratiques Oracle
- Nommez vos vues avec un préfixe explicite (ex.
v_ouvw_) afin de les distinguer immédiatement des tables dans vos requêtes et dans votre catalogue Oracle. Cela améliore considérablement la lisibilité du code et la gestion des objets en équipe. - Ajoutez systématiquement
WITH READ ONLYsur toutes les vues destinées au reporting ou à la consultation. Cela prévient les modifications accidentelles et documente clairement l’intention de l’objet pour les futurs développeurs qui maintiendront la base.
Aller plus loin
Pour approfondir vos compétences sur les objets Oracle liés aux vues et à l’optimisation des requêtes, consultez ces ressources complémentaires sur courssql.com :
- MATERIALIZED VIEW Oracle SQL : découvrez comment créer des vues matérialisées qui stockent physiquement les données pour des performances optimales sur des requêtes agrégées volumineuses.
- INSTEAD OF TRIGGER Oracle SQL : apprenez à rendre vos vues complexes entièrement modifiables grâce aux triggers de substitution, indispensables pour les architectures multicouches.
- GRANT Oracle SQL : maîtrisez la gestion des droits d’accès aux vues et aux tables pour sécuriser efficacement votre schéma Oracle en environnement multi-utilisateurs.
Sur le même thème
- ALTER TABLE Oracle : modifier une table SQL facilement
- CONSTRAINT Oracle : Guide complet des contraintes SQL
- INDEX Oracle SQL : Optimiser les performances des requêtes
- SYNONYM Oracle : Alias d’Objets SQL Expliqué
- SEQUENCE Oracle SQL : Définition, Syntaxe et Exemples
- TRUNCATE en Oracle SQL : Guide complet et pratique
