420-PK6-SL Banques de données Avancées LES VUES



Documents pareils
COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Gestion des utilisateurs et de leurs droits

Bases de Données relationnelles et leurs systèmes de Gestion

Le Langage De Description De Données(LDD)

Langage SQL : créer et interroger une base

TP3 : Creation de tables 1 seance

Le langage SQL Rappels

Partie II Cours 3 (suite) : Sécurité de bases de données

Le Langage SQL version Oracle

Auto-évaluation Oracle: cours de base

420-PK6-SL Banques de données Avancées. UTILISATEURS (suite)

Compétences Business Objects

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Administration des bases de données. Jean-Yves Antoine

Bases de données et sites WEB Licence d informatique LI345

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Cours Bases de données 2ème année IUT

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

TP Contraintes - Triggers

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Les bases de données

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Bases de données relationnelles

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

420-PK6-SL Banques de données Avancées UTILISATEURS

Cours Bases de données 2ème année IUT

Systèmes de Gestion de Bases de Données

Olivier Mondet

1. Qu'est qu'un tablespace?

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Bases de données et sites WEB

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

A QUOI SERVENT LES BASES DE DONNÉES?

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Intégrité des données

Création et Gestion des tables

Création d'une nouvelle base de données

Le langage SQL (première partie) c Olivier Caron

Partie 0 : Gestion des tablespace et des utilisateurs... 3

SQL Historique

Plan de formation : Certification OCA Oracle 11g. Les administrateurs de base de données (DBA) Oracle gèrent les systèmes informatiques

MODE OPERATOIRE OPENOFFICE BASE

Devoir Data WareHouse

Notes de cours : bases de données distribuées et repliquées

Optimisations des SGBDR. Étude de cas : MySQL

Introduction au Système de Gestion de Base de Données et aux Base de Données

Vincent Augusto

FileMaker 13. Guide de référence SQL

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

MySQL / SQL EXEMPLES

BTS/CGO P10 SYSTEME INFORMATION Année

A QUOI SERVENT LES BASES DE DONNÉES?

1 Position du problème

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

PHP 5. La base de données MySql. A. Belaïd 1

La présente publication est protégée par les droits d auteur. Tous droits réservés.

Master Exploration Informatique des données DataWareHouse

Cours: Administration d'une Base de Données

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Présentation du module Base de données spatio-temporelles

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Cours SQL. Base du langage SQL et des bases de données

Les bases de l optimisation SQL avec DB2 for i

1 Introduction et installation

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

TP Administration Oracle

CREATION WEB DYNAMIQUE

CHAPITRE 4 POLITIQUES DE CONTRÔLES DES ACCÈS SOUS ORACLE ADMINISTRATION ET TUNING DE BASES DE DONNÉES 10/05/2015 RESPONSABLE DR K.

TP Bases de données réparties

Corrigés détaillés des exercices

Gestion de base de données

Trier les ventes (sales order) avec Vtiger CRM

Session S12 Les bases de l optimisation SQL avec DB2 for i

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

SQL Serveur Programme de formation. France Belgique Suisse - Canada. Formez vos salariés pour optimiser la productivité de votre entreprise

Du 10 Fév. au 14 Mars 2014

Encryptions, compression et partitionnement des données

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Mysql avec EasyPhp. 1 er mars 2006

Cours 4 : Agrégats et GROUP BY

SQL Server 2014 Administration d'une base de données transactionnelle avec SQL Server Management Studio

SQL Server Administration d'une base de données transactionnelle avec SQL Server Management Studio (édition enrichie de vidéos)

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Description de SQL SERVER. historique

Les BASES de DONNEES dans WampServer

Mysql. Les requêtes préparées Prepared statements

et Groupe Eyrolles, 2006, ISBN :

Historisation des données

Transcription:

420-PK6-SL Banques de données Avancées LES VUES

CAS D'UTILISATION Prenons en exemple cette requête complexe : SELECT a.tablespace_name, a.contents, a.extent_management, a.allocation_type, a.segment_space_management, a.bigfile, a.status, nvl(sum(b.count_files),0), nvl(sum(b.bytes),0), nvl(sum(b.maxbytes),0), nvl(sum(b.bytes),0)-nvl(sum(c.free_bytes),0) fromdba_tablespaces a, ( select TABLESPACE_NAME, sum(bytes) bytes, count(*) count_files, sum(greatest(maxbytes,bytes)) maxbytes from DBA_DATA_FILES group by TABLESPACE_NAME union all select TABLESPACE_NAME, sum(bytes), count(*), sum(greatest(maxbytes,bytes)) maxbytes from DBA_TEMP_FILES group by TABLESPACE_NAME )b, ( select TABLESPACE_NAME, sum(bytes) free_bytes from DBA_FREE_SPACE group by TABLESPACE_NAME union all select TABLESPACE_NAME, sum(bytes_free) free_bytes from V$TEMP_SPACE_HEADER group by TABLESPACE_NAME ) c where a.tablespace_name = b.tablespace_name(+) and a.tablespace_name = c.tablespace_name(+) group by a.tablespace_name, a.contents, a.extent_management, a.allocation_type, a.segment_space_management, a.bigfile, a.status order by a.tablespace_name;

CAS D'UTILISATION Cette requête comtiens deux requêtes imbriquées soit : select TABLESPACE_NAME, sum(bytes) bytes, count(*) count_files, sum(greatest(maxbytes,bytes)) maxbytes from DBA_DATA_FILES group by TABLESPACE_NAME union all select TABLESPACE_NAME, sum(bytes), count(*), sum(greatest(maxbytes,bytes)) maxbytes from DBA_TEMP_FILES group by TABLESPACE_NAME et une autre simillaire. Notez aussi que cette requête en est une d'agglomération entre deux SELECT.

CAS D'UTILISATION Ce cas est une application idéale pour les vues. En effet, si nous créons une vue de la première requête imbriquée comme ceci : CREATE VIEW TBSpace1 AS select TABLESPACE_NAME, sum(bytes) bytes, count(*) count_files, sum(greatest(maxbytes,bytes)) maxbytes from DBA_DATA_FILES group by TABLESPACE_NAME union all select TABLESPACE_NAME, sum(bytes), count(*), sum(greatest(maxbytes,bytes)) maxbytes from DBA_TEMP_FILES group by TABLESPACE_NAME;

CAS D'UTILISATION Et que nous faisons de même pour la seconde table imbriquée : CREATE VIEW TBSpace2 AS select TABLESPACE_NAME, sum(bytes) free_bytes from DBA_FREE_SPACE group by TABLESPACE_NAME union all select TABLESPACE_NAME, sum(bytes_free) free_bytes from V$TEMP_SPACE_HEADER group by TABLESPACE_NAME;

Notre requête du début deviendrait : SELECT a.tablespace_name, a.contents, a.extent_management, a.allocation_type, a.segment_space_management, a.bigfile, a.status, nvl(sum(b.count_files),0), nvl(sum(b.bytes),0), nvl(sum(b.maxbytes),0), nvl(sum(b.bytes),0)-nvl(sum(c.free_bytes),0 fromdba_tablespaces a, TBSpace1 b, TBSpace2 c CAS D'UTILISATION where a.tablespace_name = b.tablespace_name(+) and a.tablespace_name = c.tablespace_name(+) group by a.tablespace_name, a.contents, a.extent_management, a.allocation_type, a.segment_space_management, a.bigfile, a.status order by a.tablespace_name; Pas mal simplifiée n'est-ce pas!

CAS D'UTILISATION Cependant, lors de la tentative de création de la vue, Oracle répond avec le message d'erreur suivant : CREATE VIEW TBSpace1 AS select TABLESPACE_NAME, sum(bytes) bytes, count(*) count_files, sum(greatest(maxbytes,bytes)) maxbytes from DBA_DATA_FILES group by TABLESPACE_NAME union all select TABLESPACE_NAME, sum(bytes), count(*), sum(greatest(maxbytes,bytes)) maxbytes from DBA_TEMP_FILES group by TABLESPACE_NAME; ERREUR Ó la ligne 4 : ORA-01031: privilèges insuffisants

IMPORTANT Le compte SYSTEM possède le rôle DBA. Mais ce n'est pas suffisant pour accomplir la tâche de création de Vues impliquant des Vuesdu schéma d'oracle et DBA_DATA_FILES est une vue appartenant au schéma d'oracle. Notez qu'on peux effectuer des SELECT sur cette vue en étant connecté comme SYSTEM mais pas créer d'autres vues à partir de celles-ci. Il nous faut donc une élévationde plus et donc le niveau SYSDBA. Pour obtenir ce niveau, il faut se connecter comme suit : CONNECT SYSTEM/Oracle AS SYSDBA Une fois connecté de cette manière, on peux créer les deux vues et exécuter la requête initiale en faisant appel aux vues plutôt que d'imbriquer les requêtes secondaires.

DÉFINITION C'est quoi une Vue? Quand on lance une requête, Oracle crée une table temporaire et libère l'espace mémoire occupée par celle-ci dès qu'elle est affichée. Une vue c'est une forme de requête déguisée en table. Lors de la création d'une vue: Oracle sauve la requête qui a servi à créer la vue Oracle fait croire que la requête est une table Une vue est dynamique, ce qui veux dire qu'elle se comporte comme une table et on peux y opérer des SELECT, des INSERT INTO, des DELETE FROM, des UPDATE. Cependant, il y a certaines restrictions sur la création des vues pour que celles-ci acceptent ces commandes.

Une vue peux être bâti à partir : DÉFINITION d'une requête partielle sur une table Permet de cacher certains champs à certains utilisateurs d'une jointure entre deux tables Permet de regrouper des champs afin de faciliter l'ajout d'une table avec des clauses particulières Permet de simplifier l'écriture (sauvegarde de requêtes)

DÉFINITION Exemple : Supposons la table Abonnés contentant les champs suivants : Code, Nom, Prenom, NAS, Age, CCrédit, Adresse, Tele, Email Supposons maintenant que la plupart des employés de l'entreprise aient besoin d'accéder aux informations usuellesdes clients mais n'aient pas le droit d'accéder aux informations plus personnelles des clients. On créeras alors une vue pour ces employés On leurs retirera les privilèges sur la table Abonnés On leurs accordera tous les privilèges sur la vue.

DÉFINITION Table Abonnés: Code, Nom, Prenom, NAS, Age, CCrédit, Adresse, Tele, Email CREATE VUE Clients AS SELECT Nom, Prenom, Age, Adresse, Tele, Email; Notez que la vue ne présente pas les champs NAS et CCrédit. Ainsi nos employés pourront manipuler la clientelle, soit INSÉRER de nouveaux clients, SUPPRIMER des clients, APPORTER de corrections, s'ils en ont le privilège bien entendu.

CONDITIONS ET RESTRICTIONS Afin de pouvoir créer des Vuesdans notre propre schéma, il faut posséder le privilège CREATE VIEW Afin de pouvoir créer des Vuesdans d'autres schémas, il faut posséder le privilège CREATE ANY VIEW L'emploi de WITH READ ONLY crée une Vueen lecture seule. Aucune forme d'édition ne peux y être apporté. L'emploi de WITH CHECK OPTION empêche tout changements à la Vueou aux tables référés par celle-ci si ces changements produisent une violation de contrainte de validation à valeurs multiples.

SYNTAXE La syntaxe de base est : CREATE VIEW sonnom AS requête; A cette syntaxe on peux ajouter les éléments suivants : OR REPLACE Permet de recréer une vue. Ex.: CREATE OR RECRETATE VIEW mavue AS requête; FORCE Permet de créer une Vuemême si les tables n'existent pas. On peux préfixer le nom de la vue du nom d'un usager Ex. : CREATE VIEW db.savueas Cette instruction créera la vue dans le schéma de l'usager db même si on est connecté en tant que autreusager.

CONDITIONS ET RESTRICTIONS Afin qu'une vue soit éditable, les conditions suivantes doivent être respectées : Chaque colonne de la Vuedoit correspondre à une et une seule colonne d'une table visé par la Vue. La Vuene doit contenir aucun des éléments suivants : Un opérateur d'ensemble Une clause DISTINCT Des agrégats ou GROUP BY des clauses ORDER BY des clauses MODEL des clauses CONNECT BY des clauses START WITH Une collection spécifiée par une liste de choix SELECT Une sous-requête Une sous-requête "Lecture seule"

CONDITIONS ET RESTRICTIONS Afin qu'une vue soit éditable, les conditions suivantes doivent être respectées (suite): Pour qu'une Vuecontenant des jointuressoit éditableles conditions suivantes doivent êtres toutes respectées : La jointure doit stipuler une seule table Afin d'accomplir des INSERT et des UPDATE: La Vuene doit pas avoir été créée avec l'option WITH CHECK OPTION Toute colonne où des données seraient insérées doivent provenir d'une table key-preserved. Une table key-preservedest une table dont toute clé primaire dans la table de base demeure une clé primaire dans le résultat de la jointure.

EXEMPLES Une Vueen lecture seule : CREATE VIEW mavue AS SELECT Code, Nom, Adresse, Tele, Emain FROM Clients WITH READ ONLY; Recréer une vue : CREATE OR RECREATE VIEW mavue AS SELECT Code, Nom, Adresse, Tele, Emain FROM Clients;

EXEMPLES WITH CHECK OPTION Supposons la contrainte de vérification sur un champ d'une table: region VARCHAR2(12) CONSTRAINT valideregion CHECK ( regionin 'nord','sud','est', 'ouest') Si une Vueest créée avec WITH CHECK OPTION Une mise-à-jour de celle-ci ne sera pas permise si elle viole la contrainte de validation de la table sous-jacente. Oracle réagira par le message d'erreur suivant : ORA-01402 : view WITH CHECK OPTION where-clause violation

EXEMPLES Une Vue avec calculs (csl): CREATE VIEW grille AS SELECT Qte, DESCR as "Descr.", Cout as "Coût", (Cout * Qte) as "STotal", ((Cout* Qte)* 0.05) as "TPS", (((Cout* Qte)+ ((Cout* Qte) * 0.05)) * 0.095) as "TVQ", ((Cout* Qte) + ((Cout* Qte) * 0.05) + (((Cout* Qte) * 0.05) * 0.095) ) as "Total" FROM ArticlesFin;

EXEMPLES Une Vueavec calculs et noms de colonnes prédéfinis : CREATE OR REPLACE VIEW grille ( Qte, Descr, Cout, STotal, TPS, TVQ, Total ) AS SELECT QTE, DESCR, COUT, (Cout * Qte), ((Cout* Qte)* 0.05), (((Cout* Qte)+ ((Cout* Qte) * 0.05)) * 0.095), ((Cout* Qte) + ((Cout* Qte) * 0.05) + (((Cout* Qte) * 0.05) * 0.095) ) FROM ArticlesFin;

EXEMPLES Cette Vue aura la structure suivante : SQL> DESC grille; Nom NULL? Type ----------- -------- ---------------------- QTE NUMBER(38) DESCR VARCHAR2(32) COUT NUMBER(12,2) STOTAL NUMBER TPS NUMBER TVQ NUMBER TOTAL NUMBER

Cette Vue est-elle éditable? QUESTION Peut-on y insérer des valeurs si on omet les champs calculés?