Compléments BD

publicité
FORMATION D’INGÉNIEURS EN INFORMATIQUE FIIFO
UNIVERSITÉ PARIS SUD
IUT d’ORSAY et FACULTÉ des SCIENCES d’ORSAY
Spécialisation Bases de données
G.Ausseresse
COMPLÉMENTS
de BASES de DONNÉES
ORACLE
Page
I.
1.
2.
II.
DICTIONNAIRE DE DONNEES ............................................................................................... 2
Cas général ............................................................................................................................... 2
Oracle ....................................................................................................................................... 3
PRIVILEGES ET ROLES ........................................................................................................... 5
1. Privilèges objets ....................................................................................................................... 5
2. Privilèges système .................................................................................................................... 5
3. Rôles......................................................................................................................................... 6
III. VUES ........................................................................................................................................... 9
1. Définition ................................................................................................................................. 9
2. Syntaxe ..................................................................................................................................... 9
3. Intérêt ..................................................................................................................................... 10
4. Mise à jour SQL92 ................................................................................................................. 11
5. Mise à jour Oracle .................................................................................................................. 13
IV. DIVERS ..................................................................................................................................... 14
1. Synonymes ............................................................................................................................. 14
2. Pseudo-colonnes..................................................................................................................... 15
3. Table DUAL .......................................................................................................................... 15
4. Séquences ............................................................................................................................... 15
ANNEXE ........................................................................................................................................... 17
Base exemple ETUDES ................................................................................................................. 17
V.
VOCABULAIRE ORACLE ...................................................................................................... 18
VI. REFERENCES........................................................................................................................... 19
FIIFO
769802668
édité le 16/04/2017 22:45:00
I.
DICTIONNAIRE DE DONNEES
1. Cas général
Définition d’une base de données :
La norme SQL92 ne définit pas formellement la notion de base de données. La norme définit par
contre :
- des concepts : environnement-SQL, catalogue, schéma, tables, vues, colonnes, domaines.
- une structure hiérarchique de ces concepts : un environnement-SQL contient zéro, un ou
plusieurs catalogues ; un catalogue contient un ou plusieurs schémas et un schéma est contenu
dans un seul catalogue ; un schéma contient zéro, une ou plusieurs tables et chaque table
appartient à un seul schéma, etc.
Un schéma est un ensemble logique de domaines, tables, contraintes, vues et privilèges. C’est la
notion théorique la plus proche de celle de base de données usuelle (par exemple, Ingres). Chaque
constructeur de SGBD peut en avoir une implémentation physique qui lui est propre.
Chaque catalogue contient un schéma particulier, dit schéma d’information, regroupant des tables
qui définissent tous les objets se trouvant dans les schémas du catalogue. Certains parlent de
dictionnaire ou de méta-base de la base de données. La norme précise un certains nombre de
tables : table des schémas (c.-à-d. décrivant les schémas), table des tables, tables des colonnes,
tables des droits, etc. Mais les utilisateurs ne peuvent accéder à toutes les données de la méta-base
(penser aux mots de passe). Ce qui est alors souvent appelé tables systèmes est en fait un ensemble
de vues sur les tables de la méta-base. Les utilisateurs n’ont accès qu’à ces vues qu’en lecture (pour
des raisons de sécurité évidentes, ils ne peuvent les modifier). Par exemple, le SGBD Oracle définit
plus d’une centaine de vues sur les tables de la méta-base.
Noms des objets d’une base
Avant SQL92, la notion de schéma était couplée avec celle de nom-utilisateur, ce qui garantissait
l’unicité des noms de schémas. En SQL92, un utilisateur pouvant créer plusieurs schémas, ceux-ci,
en cas d’ambiguïté, sont désignés en fonction du catalogue qui les contient. Le nom complet d’une
table est alors :
nom_catalogue.nom_schéma.nom_table
(penser à la définition hiérarchique des fichiers UNIX)
Le schéma entité-association donné en annexe modélise les objets des bases de données SQL92.
Ces objets sont souvent identifiés relativement à d’autres.
A propos de la norme SQL
La norme ne définit pas tout. Parmi les éléments non définis, elle distingue :
- ceux définis par l’implémentation (149 éléments) : l’implémentation doit en définir la syntaxe,
les valeurs, le comportement,…, suivant les cas. Par exemple, la précision du type de donnée
entier doit être définie par l’implémentation.
769802668
Page 2
sur 19
-
ceux dépendants de l’implémentation (75 éléments) : l’implémentation n’a pas besoin de les
préciser. Par exemple, la représentation physique d’un type de donnée, lequel peut varier au
cours des versions successives du SGBD.
2. Oracle
Dictionnaire de données et tables système Oracle :
Le dictionnaire de données d’une base de données se compose de tables de base et de vues (tables
système) sur ces tables. Ces diverses tables sont la propriété de l’utilisateur Oracle SYS et se
trouvent dans l’espace de tables (« tablespace ») SYSTEM de cette BD. Il est important pour
l’intégrité de la BD qu’aucun utilisateur ne puisse modifier ces tables1.
Dans les tables de base, une partie de l’information est cryptée. Seul Oracle peut lire et écrire dans
ces tables. Par contre, les vues sont lisibles par les utilisateurs (s’ils possèdent les droits adéquats)
en utilisant le langage SQL (dès que la base est ouverte).
Que contiennent ces tables ?
 La définition de tous les objets de la BD (tables, vues, index, clusters, synonymes, triggers,
procédures,…).
 Combien d’espace est alloué et combien d’espace est utilisé par ces objets.
 Des informations sur les contraintes d’intégrité.
 Les valeurs par défaut des colonnes.
 Des informations sur les utilisateurs, leurs droits et leurs rôles.
 Des informations d’audit : qui a accédé/mis à jour des objets.
 …
A quoi servent ces tables ?
 Oracle y accèdent pour trouver des informations sur les utilisateurs, les objets des schémas et les
structures de stockages.
 Oracle les modifie chaque fois qu’un ordre du DDL (langage de définition de données) est
exécuté.
 Chaque utilisateur de la BD peut y lire des informations sur la BD.
Des synonymes existent pour plusieurs vues couramment utilisées. Il est recommandé aux
programmeurs de les utiliser car ils sont moins susceptibles de changement d’une version à l’autre
du SGBD.
Exemples :
TABS est le synonyme de USER_TABLES, COLS de USER_TAB_COLUMNS,
CAT de USER_CATALOG, DICT de DICTIONNARY…
Les tables système, qui n’ont pas une appellation définie dans la norme SQL2, portent dans le cas
d’Oracle un nom préfixé suivant leur contenu. Dans plusieurs cas, il existe 3 vues contenant des
informations similaires et qui se distinguent par leur préfixe. Leurs colonnes sont alors les mêmes
sauf les cas signalés ci-après en remarque.
A l’exception d’une table d’audit, SYS.AUD§, qui peut devenir trop volumineuse et dont l’administrateur peut enlever
des lignes sans préjudice pour le fonctionnement de la base.
1
769802668
Page 3
sur 19
PREFIXE
USER_
ALL_
DBA_
Vue utilisateur
Ce qui se trouve dans le
schéma utilisateur
Vue utilisateur étendue
Tout ce à quoi peut
accéder l’utilisateur
Vue pour administrateur BD
Tout ce qui concerne
Nécessite le droit SELECT tous les utilisateurs
ANY TABLE pour y accéder
REMARQUE
Pas de colonne OWNER, car sa
valeur est le nom de l’utilisateur
Sur-ensemble de la vue USER_
associée
Pour des raisons de sécurité,
- certaines des colonnes de ces
vues ne figurent pas dans les
autres vues
- elles ne possèdent pas de
synonymes
EXEMPLES
Un utilisateur veut connaître les objets de son schéma :
SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS
Remarque : Pour bien comprendre la particularité d’Oracle, voici l’équivalent avec Ingres de cette
requête. Si l’utilisateur Ingres veut savoir quelles sont ses tables, vues et index :
SELECT table_name, table_type
FROM iitables
WHERE table_owner = USER
Un utilisateur veut connaître tous les objets auxquels il a accès :
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM ALL_OBJECTS
Un administrateur veut connaître tous les objets de la BD :
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM SYS.DBA_OBJECTS
Contraintes portant sur une table :
Les contraintes associées à une table sont décrites dans la table USER_CONSTRAINTS qui
contient les colonnes suivantes
CONSTRAINT_NAME : nom de la contrainte
CONSTRAINT_TYPE : type de contrainte C pour CHECK, P pour primary key, R pour clé étrangère (intégrité
référentielle)
SEARCH_CONDITION : énoncé de la contrainte
Oracle maintient aussi des tables virtuelles qui reflètent l’activité de la BD et sont appelées
« dynamic performance tables ». Ces tables sont préfixés par V_$. Seuls les DBA peuvent les
utiliser, créer des vues dessus et autoriser des utilisateurs à interroger ces vues.
Des vues de synonymes publics préfixés par V$ existent :
V$DATAFILE : fichiers de la BD
V$FIXED_TABLES : « dynamic performance » tables et vues
769802668
Page 4
sur 19
II.
PRIVILEGES ET ROLES
Dans Oracle, les possibilités en matière de sécurité des données sont plus développées que dans la
norme SQL2 et les privilèges sont accordés à trois niveaux :
1. Privilèges objets
2. Privilèges système
3. Rôles
1. Privilèges objets
Il permettent de réaliser des opérations particulières sur des objets (tables, vues, séquences,
procédures stockées, synonymes de table, …)
ALTER DELETE EXECUTE INDEX INSERT REFERENCES SELECT UPDATE
*
*
*
*
*
*
*
TABLE
*
*
*
*
VUE
*
*
SEQUENCE
*
PROCEDURE
Ils ne peuvent être accordés que par le propriétaire de l’objet ou par qui a reçu le droit d’accorder.
GRANT liste_privilèges | ALL
ON objet
TO liste_utilisateurs | rôle | PUBLIC
[WITH GRANT OPTION] ;
ALL=en une seule commande tous les privilèges possibles sur l’objet
PUBLIC=tous les utilisateurs
permet de transmettre le privilège
Suppression du privilège:
REVOKE liste_privilèges | ALL
ON objet FROM liste_utilisateurs | rôle | PUBLIC
[CASCADE CONSTRAINT][FORCE] ;
La suppression d’un privilège a des effets, dits en CASCADE, si l’utilisateur avait utilisé ce
privilège pour l’accorder à d’autres ou créer des objets ou des contraintes d’intégrité référentielles.
De plus, deux options sont possibles :
CASCADE CONSTRAINT :
option pour supprimer toutes les contraintes de références
définies grâce au privilège REFERENCES par le révoqué.
FORCE :
option pour révoquer un privilège EXECUTE sur un objet
défini par le révoqué.
2. Privilèges système
Ils permettent aux utilisateurs d’une base de réaliser diverses opérations ou catégories d’opérations,
sans qu’elles portent sur un objet précis, mais sur un type de commande. Par exemple : créer une
table, se connecter à la base, etc. Il en existe presque une centaine dans Oracle 8i.
769802668
Page 5
sur 19
Exemples : CREATE [ANY] CLUSTER|INDEX|PROCEDURE|SEQUENCE|TABLE|TRIGGER|TYPE|VIEW
Le paramêtre ANY signifie que le privilège est valable dans tous les schémas de la base.
 Accorder un privilège système :
GRANT liste_privilèges_système
TO liste_utilisateurs | rôle | PUBLIC
PUBLIC = tous les utilisateurs
[WITH ADMIN OPTION] ;
3. Rôles
Cette notion n’existe pas dans SQL2 et est propre à ORACLE
3.1) Définition
Un rôle est un ensemble de privilèges objet, de privilèges système et de rôles.
3.2) Intérêt des rôles
Ils permettent de gérer au mieux les droits des différents utilisateurs tout en consolidant la sécurité.
Une hiérarchie de rôles aide à gérer plus facilement le sécurité des données d’une base.
On distingue des rôles :
 au niveau application contenant les privilèges nécessaires à l’exécution d’une application.
 au niveau utilisateur contenant privilèges et rôles qui sont nécessaires à un type d’utilisateur.
Exemple : Cas où différents utilisateurs doivent pouvoir accéder à deux applications :
gestion_stages et gestion_enseignants.
1.
Créer un rôle appelé gest_sta_ens
2.
Donner les rôles des applications gestion_stages et gestion_enseignants au rôle
gest_sta_ens
3.
accorder le rôle gest_sta_ens aux utilisateurs concernés.
util1
util2
util4
util3
Rôle
Gest_sta_ens
Rôle
Gestion_stage
s
Privilèges de
l ’application
Gestion_stages
769802668
util5
Rôles
Utilisateur
s
Rôle
Gestion_enseignants
Privilèges de
l ’application
Gestion_enseignants
Rôles
Application
s
Privilèges
Application
s
Page 6
sur 19
3.3) Mode d’emploi des rôles
1. Le créateur (qui possède le privilège CREATE ROLE) doit donner un nom au rôle :
CREATE ROLE nom_rôle
([NOT IDENTIFIED | IDENTIFIED [BY password | EXTERNALLY | GLOBALLY]) ;
NOT IDENTIFIED est l’option par défaut : aucun mot de passe n’est demandé pour activer le rôle.
IDENTIFIED signifie que l’utilisateur doit être autorisé par une méthode spécifique avant que le
rôle soit activé.
BY password : le rôle est protégé par un mot de passe qui sera demandé chaque fois qu’il sera
activé.
EXTERNALLY : l’autorisation est donné par un service externe (système d’exploitation par
exemple)
GLOBALLY : l’autorisation est donnée par le Oracle Security Service ou lors du login (annuaire
LDAP).
2. définir les privilèges du rôle : GRANT…ON…TO nom_rôle ;
3. accorder le rôle aux utilisateurs : GRANT nom_rôle TO liste_utilisateurs ;
4. chaque utilisateur doit activer le rôle reçu avant de l’utiliser :
SET ROLE liste_rôle | ALL [EXCEPT nom_rôle];
Les rôles ne figurant pas dans la liste liste_rôle sont désactivés.
ALL les active tous excepté ceux figurant après EXCEPT.
5. Pour désactiver les rôles : SET ROLE liste_rôle NONE ;
Le créateur d’un rôle peut le supprimer ainsi que tous les privilèges accordés aux utilisateurs qui le
possèdent par : DROP ROLE nom_rôle ;
Rôles prédéfinis :
Trois rôles sont définis pour compatibilité avec les versions d’Oracle précédentes, mais Oracle
recommande à l’administrateur d’une base de définir ses propres rôles. Il s’agit de :
CONNECT : permet à l’utilisateur qui le possède de se connecter et de créer certains objets (voir
ci-dessous).
RESSOURCE : permet à l’utilisateur qui le possède de créer des procédures, des triggers, des
types, …(voir ci-dessous).
DBA : nécessaire à l’administration de la base, comporte plusieurs rôles et de nombreux privilèges.
Des rôles permettent d’utiliser les outils EXPORT, IMPORT.
EXP_FULL_DATABASE : rôle pour l’exportation des données d’une base entière.
IMP_FULL_DATABASE : rôle pour l’importation des données d’une base entière.
Des rôles sont définis pour accéder aux vues et packages du dictionnaire des données exporté :
DELETE_CATALOG_ROLE
EXECUTE_CATALOG_ROLE
SELECT_CATALOG_ROLE
Le tableau ci-dessous définit les privilèges de certains rôles.
DES2000 est un rôle qui contient tous les privilèges nécessaires à un utilisateur de
DESIGNER_2000.
769802668
Page 7
sur 19
PRIVILEGE
COMMENTAIRE
Ce rôle permet de
ALTER SESSION
CREATE CLUSTER
CREATE DATABASE LINK
CREATE SEQUENCE
CREATE SESSION
se connecter
CREATE SYNONYM
CREATE TABLE
CREATE VIEW
CREATE PROCEDURE
CREATE ROLE
CREATE SNAPSHOT
CREATE TRIGGER
CREATE TYPE
DROP ANY SYNONYM
UNLIMITED TABLESPACE
SELECT ANY TABLE
accéder aux tables DBA_…
DES2000
*
*
*
*
*
ANY
*
*
*
*
*
*
ROLE
CONNECT
*
*
*
*
*
*
*
*
RESSOURCE
*
*
*
*
*
*
*
*
Tables système permettant de connaître les privilèges et rôles
Des vues sur des tables du dictionnaire des données de la BD (appelées tables système) sont
accessibles par SQL et permettent de connaître les privilèges et rôles existants.
NOM de la table
user_tab_privs
user_sys_privs
user_role_privs
all_tab_privs
dba_roles
dba_sys_privs
session_privs
session_roles
769802668
Contenu
Droits sur des objets que l’utilisateur possède, ou qu’il a reçu le droit d’accorder.
Privilèges système accordés à l’utilisateur courant.
Rôles accordés à l’utilisateur courant
Droits sur des objets pour lesquels l’utilisateur est celui qui a accordé les droits (GRANTOR),
celui qui les a reçu (GRANTEE), le propriétaire (GRANTOR) ou un rôle activé, ou droits
reçus par PUBLIC
Tous les rôles de la base.
Privilèges système accordés aux utilisateurs et aux rôles.
Privilèges système dont dispose l’utilisateur connecté
Rôles activés par l’utilisateur connecté.
Page 8
sur 19
III. VUES
1. Définition
Une vue est une table dérivée de tables permanentes, non stockée physiquement dans la base de
données comme une table ordinaire. Une vue est une table virtuelle dynamique et en quelque sorte
une fenêtre sur la base.
La manière de stocker et d’utiliser une vue dépend du SGBD. Par exemple, dans Ingres, seule la
définition de la vue est stockée dans les tables système de la base. Chaque fois qu’un ordre SQL fait
appel a une vue, SQL remplace la vue par sa définition, obtenant un ordre SQL ne contenant plus
que des tables. Ingres optimise alors le chemin d’accès aux tables.
Rien ne permet à un utilisateur de faire la différence entre une table et une vue, sauf en ce qui
concerne les commandes de mise à jour (voir paragraphes 4 et 5).
2. Syntaxe
Syntaxe création
CREATE [OR REPLACE] VIEW nom_vue [(liste-colonnes)]
AS SELECT …
FROM liste-tables-vues
tables ou vues qu’on appelle tables de base de la vue
[WHERE condition]
[WITH [CASCADE | LOCAL] CHECK OPTION]
concerne les mises à jour voir IV
Syntaxe suppression
DROP VIEW nom_vue
Droits nécessaires pour créer une vue
Le créateur de la vue doit avoir le privilège CREATE VIEW (ou CREATE ANY VIEW pour créer
une vue dans un autre schéma que le sien). Il doit avoir reçu directement (sans passer par un rôle)
les droits SELECT, INSERT, DELETE, UPDATE sur chacune des tables de base de la vue. Ces
droits doivent avoir été acquis avec l’option WITH GRANT OPTION pour que le créateur de la vue
puisse accorder des droits dessus à d’autres utilisateurs
Exemple 1. Vue permettant d’avoir la note finale de chaque étudiant dans chaque cours avec le
nom du professeur.
CREATE VIEW BULLETIN (NUM, CODE, ENS, NOTE, BONUS, TOTAL)
AS SELECT NUM, C.CODE, ENS, NOTE, BONUS, NOTE + BONUS
FROM RESUBIS, COURS C
WHERE RESUBIS.CODE = C.CODE
L’ordre SELECT * FROM BULLETIN donne alors
NUM
2140
769802668
CODE
ALGO3
ENS
Korth
NOTE
12
BONUS
2
TOTAL
14
Page 9
sur 19
1128
1128
2140
3213
3512
ALGO3
BD
BD
ALGO3
ALGO1
Korth
Korth
Korth
Korth
Ullman
15
9
11
15
7
1
0
3
2
1
16
9
14
17
8
3. Intérêt
 Augmenter l’indépendance logique
Cela permet de faire évoluer le schéma de la base de données sans avoir à modifier les programmes
d’application. Nous allons illustrer ceci sur un exemple :
Exemple 2. Supposons que l’on dispose au départ de la base de schéma
ETUDIANT = (NUM, NOM, ADR)
INSCRIT0 = (NUM, CODE, ENS, DATE)
RESUBIS0 = (NUM, CODE, ENS, BONUS, NOTE)
Et de la vue qui permet d’éditer les résultats, définie par
CREATE VIEW BULLETIN (NUM, CODE, ENS, NOTE, BONUS, TOTAL)
AS SELECT NUM, CODE, ENS, NOTE, BONUS, NOTE + BONUS
FROM RESUBIS0
Puis on décide, du fait qu’un cours n’est assuré que par un seul professeur, de modifier les relations
pour “normaliser” la base en introduisant la relation COURS :
COURS = (CODE, ENS)
INSCRIT = (NUM, CODE, DATE)
RESU
= (NUM, CODE, NOTE)
Il suffit alors de changer la définition de la vue ( voir l’exemple 1) en gardant les mêmes noms de
colonnes pour ne pas avoir à modifier les programmes d’application.

Préserver la confidentialité
Exemple 3. Chaque étudiant a le droit de consulter sur ordinateur les notes, mais pas de savoir qui
les a obtenues lorsqu’elles sont < 10.
CREATE VIEW BELLESNOTES (NOM, NUM, CODE, NOTE)
AS SELECT E.NOM, R.NUM, R.CODE, R.NOTE
FROM RESU R, ETUDIANT E
WHERE R.NUM = E.NUM AND R.NOTE >=10
CREATE VIEW SALESNOTES (NOM, NUM, CODE, NOTE)
AS SELECT E.NOM, R.NUM, R.CODE
FROM RESU R, ETUDIANT E
WHERE R.NUM = E.NUM AND R.NOTE <10
769802668
Page 10
sur 19
CREATE VIEW VOIRNOTES (NOM, NUM, CODE, NOTE)
AS SELECT * FROM BELLESNOTES
UNION
SELECT * FROM SALESNOTES
Il faudra ensuite donner le droit de lire la vue VOIRNOTES.
GRANT SELECT ON VOIRNOTES TO PUBLIC
Exemple 4. Chaque étudiant n’a le droit de consulter sur ordinateur que les notes qui le concernent.
On crée une vue ne donnant que les notes de l’utilisateur connecté et on accorde à tous les
utilisateurs le droit de consulter la vue.
CREATE VIEW MESNOTES
AS SELECT E.NOM, RESU.NUM, RESU.CODE, RESU.NOTE
FROM RESU, ETUDIANT E
WHERE RESU.NUM = E.NUM AND E.NOM = USER
(la variable USER sera remplacée par le nom d’utilisateur Oracle)
GRANT SELECT ON MESNOTES TO PUBLIC

Simplifier le travail de l’utilisateur
Une vue peut éviter d’avoir à répéter certaines opérations, comme écrire des jointures (par exemple,
dans le cas où une jointure est nécessaire pour connaître un libellé correspondant à un code), faire
des calculs (voir exemple II.1), …
Exemple 5. Pour connaître le nom de l’étudiant avec ses notes sans avoir à écrire la jointure des
tables RESU et ETUDIANT.
CREATE VIEW RESU_EN_CLAIR
AS SELECT E.NOM, R.NUM, R.CODE, R.NOTE
FROM RESU R, ETUDIANT E
WHERE R.NUM = E.NUM
Laquelle la modification est demandée, est vérifiée.
4. Mise à jour SQL92
Toutes les vues ne permettent pas des mise à jour. Le principe est assez simple. On ne peut faire une
mise à jour au travers d’une vue que si une ligne de la vue ne correspond qu’à une unique ligne
d’une autre table de base, qui, elle, sera physiquement mise à jour.
Exemple 6. vue non modifiable
CREATE VIEW TOTALNOTES (NUM, TOTAL_ETUDIANT)
AS SELECT NUM, SUM (NOTE)
FROM RESU
GROUP BY NUM
769802668
Page 11
sur 19
Ceci n’est pas une vue permettant une mise à jour : on ne peut répercuter sur RESU une
modification de SUM (NOTE).
De là découlent des règles (un peu plus restrictive que de bon sens) données par le norme SQL (92
comme 89) pour définir une vue dite modifiable, c’est à dire qui permet d’exécuter des ordres
UPDATE, DELETE, INSERT. Une vue est modifiable si sa définition vérifie les propriétés
suivantes.
 Pas de DISTINCT
 La clause FROM n’est suivie que d’un seul nom, qui est celui soit d’une table, soit d’une
vue modifiable (appelée TAB dans ce qui suit).
 La liste derrière SELECT ne comporte que des colonnes de TAB et une seule fois chaque.
 La clause WHERE peut contenir un bloc SFW imbriqué, mais celui-ci ne doit pas faire
référence à TAB
 Pas de clause GROUP BY ou HAVING
Exemple 7. vues modifiables.
CREATE VIEW BASSESNOTES (NUM, CODE, NOTE)
AS SELECT NUM, CODE, NOTE
FROM RESU
WHERE NOTE < 10
CREATE VIEW NOTES_ANC (NUM, CODE, NOTE)
AS SELECT NUM, CODE, NOTE
FROM RESU
WHERE NUM IN (SELECT NUM FROM INSCRIT)
Option WITH[CASCADE | LOCAL] CHECK OPTION
Cette option permet d’empêcher l’utilisateur des mises à jour non conformes à la définition de la
vue.
Exemple 8. modification contraire à la définition de la vue.
Supposons que la vue BASSESNOTES de l’exemple IV.2 ait été définie.
Alors l’ordre
UPDATE BASSESNOTES
SET NOTE = NOTE + 2
Pose problème en transformant le n-uplet (1128, BD, 9) en (1128, BD, 11) avec une note > 10
contredisant la définition de la vue.
Si la vue a été définie avec l’option WITH CHECK OPTION, un tel cas ne se produira pas. Sans
l’option WITH CHECK OPTION, la table RESU sera mise à jour.
CASCADE est l’option par défaut. Elle permet de répercuter les modifications sur les tables
dépendant de la vue (puisqu’une vue peut être définie à partir d’une autre vue, elle-même définie à
partir de …). Dans le cas de LOCAL, seule la clause WHERE de la vue sur laquelle la modification
est demandée, est vérifiée.
769802668
Page 12
sur 19
5. Mise à jour Oracle
Dans le cas d’Oracle, le principe reste le même : il faut que la mise à jour de la vue corresponde à la
mise à jour d’une seule table.
Mais Oracle permet d’avoir une vue définie sur une jointure (plusieurs tables derrière la clause
FROM). Il définit la notion de table « key-preserved » dans une jointure : table dont la clé primaire
est aussi une clé (au sens UNIQUE, NOT NULL) de la jointure.
Pour que la mise à jour sur une vue définie par jointure soit possible, il faut au moins (voir la
documentation Oracle pour tous les cas) que, suivant les cas d’ordre donnés ci-dessous, les
conditions suivantes soient vérifiées, en plus de la condition « une seule table concernée par la mise
à jour ».



UPDATE : toutes les colonnes modifiées doivent appartenir à une table « key-preserved ».
DELETE : la jointure ne doit contenir qu’une seule table « key-preserved » (la même table peut
figurer plusieurs fois dans la jointure sauf si la vue comporte la clause CHECK OPTION).
INSERT : toutes les colonnes concernées par l’insertion appartiennent à une table « keypreserved » et la vue ne comporte pas de CHECK OPTION.
Pour savoir quelles colonnes d’une vue obtenue par jointure sont modifiables, il faut consulter la
table système USER_UPDATABLE_COLUMNS (COLUMN_NAME, UPD : YES/NO)
769802668
Page 13
sur 19
IV. DIVERS
1. Synonymes
1.1. Définition et intérêt
Oracle permet de renommer les objets d’un schéma en créant des noms additionnels appelés
synonymes. Ils sont utiles pour :
 Faciliter l’écriture de requêtes sans avoir besoin de spécifier la localisation et les propriétaires
des objets.
 Aider à la mise au point des applications : pendant la phase de test, utiliser un synonyme
pointant sur une table de test et, après la mise au point, faire pointer le synonyme sur la vraie
table de l’application.
Objets concernés : table, vue, séquence, fonction, procédure, package, snapshot, synonyme.
Il existe deux types de synonymes, privé et public, leur création étant soumise à des conditions :
 Synonymes privé : l’utilisateur peut créer des synonymes privés dans son schéma ou, s’il
possède le privilège CREATE ANY SYNONYM, dans un autre schéma. Le nom du synonyme
privé doit être différent du nom des autres objets du même schéma.
 Synonyme public : accessible par tout utilisateur. Quand un conflit de nom existe entre un
synonyme public et privé, Oracle donne la priorité à l’objet local.
1.2. Syntaxe
CREATE [PUBLIC] SYNONYM nom_synonyme
FOR nom_objet
DROP [PUBLIC] SYNONYM nom_synonyme
1.3. Droits nécessaires
Pour créer un synonyme, il faut avoir les privilèges système :
CREATE SYNONYM : pour créer un synonyme privé dans son propre schéma.
CREATE ANY SYNONYM : pour créer un synonyme privé dans un autre schéma.
CREATE PUBLIC SYNONYM : pour créer un synonyme public.
Les droits sur un synonyme sont les mêmes que ceux sur l’objet sur les quels ils pointe. Donner un
droit sur un synonyme est équivalent à donner un droit sur cet objet. Inversement, donner un droit
sur l’objet accorde le même droit sur tous ses synonymes. L’utilisateur qui a reçu un tel droit peut
utiliser aussi bien le nom du synonyme que celui de l’objet dans ses requêtes autorisées.
1.4.Renommage
Il ne faut pas confondre la définition d’un synonyme avec le fait de renommer un objet (table, vue,
séquence, synonyme privé, mais pas les colonnes des tables).
769802668
Page 14
sur 19
RENAME ancien_objet TO nouveau
Dans le cas de renommage d’un objet, les contraintes, index et privilèges existant dessus sont
transférés automatiquement, alors que les vues, procédures, synonymes qui se réfèrent à l’ancien
objet deviennent invalides.
2. Pseudo-colonnes
Une pseudocolonne se comporte comme une colonne de table, mais n’est pas stockée dans une
table. On peut la lire, mais pas mettre à jour, ni détruire ses valeurs.
Exemples :
CURRVAL and NEXTVAL(voir ci-dessous).
LEVEL : utile pour les requêtes hiérarchiques.
ROWID : contient l’adresse de chaque ligne de la table (ne peut servir de clé primaire car mise à
jour)
ROWNUM : nombre qui indique l’ordre d’une ligne retournée par un requête (permet par exemple
de limiter le nombre de lignes retournées).
3. Table DUAL
3.1. Définition
C’est une table :
 qui est créée automatiquement avec le dictionnaire.
 qui est possédée par l’utilisateur SYS, mais accessible à tous.
 qui ne contient qu’une colonne DUMMY de type VARCHAR2(1) et une valeur X.
3.2. Utilisation
On peut obtenir la valeur d’une pseudocolonne (exemple : date système), d’une constante ou d’une
expression à partir de n’importe quelle table :
SELECT SYSDATE FROM USER_TABLES
renvoie autant de fois SYSDATE que la table USER_TABLES contient de
lignes !
SELECT UNIQUE SYSDATE FROM USER_TABLES donne une seule fois la date système mais accède à une table qui
est volummineuse, au contraire de la table DUAL.
SELECT SYSDATE FROM DUAL
4. Séquences
4.1 Définition et intérêt
Lorsque la création de nouvelles entités dans la même table est assurée par plusieurs utilisateurs
avec création d’un identifiant numérique, des problèmes de concurrences d’accès pour connaître la
valeur de l’identifiant peuvent se poser. Pour résoudre ce problème, Oracle a implémenté des objets
769802668
Page 15
sur 19
appelés séquences qui génèrent automatiquement des valeurs séquentielles uniques, différentes pour
chaque utilisateur. Ces valeurs servent souvent de clé primaire ou de clé secondaire.
4.2 Syntaxe
CREATE SEQUENCE [schema.]nom_sequence
liste_paramètres
Exemple :
CREATE SEQUENCE ma_suite
INCREMENT by 10
Pour utiliser les valeurs de la séquence, on dispose des pseudocolonnes :
CURRVAL valeur courante de la séquence
NEXTVAL incrémente de 1 et donne la valeur suivante
SELECT ma_suite.currval from dual
INSERT INTO etudiant
VALUES (ma_suite.nextval, ‘LEWIS’, ‘CLERK’, SYSDATE) ;
769802668
Page 16
sur 19
ANNEXE
Base exemple ETUDES
ETUDIANT = (NUM, NOM, ADR)
COURS = (CODE, ENS)
INSCRIT = (NUM,CODE, DATE)
RESU = (NUM, CODE, NOTE)
PROF = (ENS, ADR)
RESUBIS = (NUM, CODE, NOTE, BONUS)
La relation INSCRIT sert à mémoriser les inscriptions antérieures des étudiants. La relation RESU
donne les notes des étudiants aux cours qu’ils suivent actuellement.
La projection de RESUBIS sur les attributs NUM, CODE, NOTE est égale à la relation RESU et
BONUS représente le bonus attribué pour un cours.
ETUDIANT
NUM
2140
1128
3213
3512
INSCRIT
NUM
2140
2140
1128
3213
3213
RESUBIS
NUM
2140
1128
1128
2140
3213
3512
769802668
NOM
Dupond
Durand
Dubois
Martin
CODE
BD
ALGO1
ALGO1
BD
ALGO3
CODE
ALGO3
ALGO3
BD
BD
ALGO3
ALGO1
COURS
CODE
BD
ALGO1
ALGO3
ADR
Paris
Orsay
Massy
Orsay
RESU
NUM
2140
1128
1128
2140
3213
3512
DATE
93
94
94
93
94
NOTE
12
15
9
11
15
7
BONUS
2
1
0
3
2
1
ENS
Korth
Ullman
Korth
CODE
ALGO3
ALGO3
BD
BD
ALGO3
ALGO1
NOTE
12
15
9
11
15
7
PROF
ENS
Korth
Ullman
Delmal
ADR
Paris
Orsay
Liège
Page 17
sur 19
V.
VOCABULAIRE ORACLE
Un cluster est un regroupement physique de plusieurs tables autour d’une ou plusieurs colonnes
afin d’augmenter les performances (par exemple en cas d’opérations de jointures).
Database link : objet de la base locale qui permet l’accès à une base distante (ORACLE ou non) ou
de monter une seconde base en lecture seulement.
Fonction : ensemble nommé de commandes PL/SQL qui retourne une valeur à l’appelant,
contrairement à une procédure.
Instance Oracle : ensemble associé à une base de donnée Oracle et formé d’un espace mémoire
appelé System Global Area (SGA) alloué par Oracle et de processus Oracle.
Procédure : ensemble nommé de commandes PL/SQL stockées dans la base.
Schéma : ensemble d’objets accessibles à un utilisateur (tables, vues, index, séquences, synonymes,
packages,…) ; à chaque utilisateur est associé un schéma. A chaque schéma correspond un espace
logique de stockage dans un ou plusieurs tablespaces de la base de données.
Session : connexion spécifique d’un utilisateur à une instance Oracle via un processus utilisateur.
Chaque fois qu’un utilisateur fait tourner un programme applicatif (par exemple un programme
ProC) ou un outil Oracle (tel SQL*Plus), Oracle crée un processus utilisateur pour faire tourner
l’application.
Par exemple, si un utilisateur se connecte à SQL*Plus, il indique username/password et une session
est établie pour cet utilisateur. Elle dure du début de la connexion à la déconnexion. Mais il peut
exister simultanément plusieurs sessions pour le même username/password.
Séquence : suite de valeurs générés et gérée automatiquement par Oracle.
Snapshot (cliché) : une table qui contient le résultat d’une requête définie sur une ou plusieurs
tables ou vues localisées dans une base distante. Notion qui n’est utilisée que dans un contexte de
base de données répartie.
Cette notion permet de maintenir des copies des données de la base distante sur un nœud local (en
lecture seulement).
Tablespace : une allocation d’espace disque dans la base pour contenir des objets.
Trigger (déclencheur) : procédure stockée dans la base et associé à un événement pouvant
intervenir sur une table. Cette procédure s’exécute quand une commande SQL de mise à jour
(DELETE, INSERT, UPDATE) affecte la table associée au déclencheur.
769802668
Page 18
sur 19
VI. REFERENCES
Documentation ORACLE
Oracle8 SQL reference
/oracle/server.804/a58225
Oracle8 Application Developper’s Guide
/oracle/server.804/a58241.htm
PL/SQL User’s Guide and Reference
/oracle/server.804/a58236
Pro*C/C++ Precompiler Programmer’s Guide
Pour l’inclusion de PL/SQL dans un programme :
/oracle/server.804/a58233/plsql.htm
Pour connaître les options de précompilation :
/oracle/server.804/a58233/precomp.htm#2111
OUVRAGES PUBLIES
SQL2, Application à ORACLE, ACCESS et RDB. P. Delmal
De Boeck Université, 1998, 2ème édition.
Oracle 7, A Abdellatif, M. Limame, A. Zeroual,
Eyrolles, 1998, 7ème tirage.
Oracle 8, Utilisation et administration. Guide de Formation. Roger Chapuis,
Editions Dunes & laser, 1998
Oracle 8, Développement de bases de données, David Lockman,
Simon & Schuster Macmillan, 1997
769802668
Page 19
sur 19
Téléchargement