Vous êtes sur la page 1sur 30

Mme LABBENE AYACHI Faten

Année Universitaire 2015 - 2016

LE LANGAGE SQL
Structured Query Language
Dialecte Oracle

Définition & manipulation des données


Contenant et contenu

Références :

Le langage SQL & L’outil iSQL*PLUS


Volume 1 - Manuel du stagiaire
M40057FR11
Production 1.1 -Février 2002
D34268
Oracle
Sommaire
Définition des données

Les tables et les contraintes d’intégrité …………………………… 4


Création des Tables et des contraintes 4
Principaux types de données. 5
Stockage des lignes. 7
Stockage des tables. 8
Types de données avancés. 9
Définition des contraintes d’intégrité. 10
Types des contraintes déclaratives. 10
Création d’une table à partir d’une requête. 11
Création des tables temporaires. 12
Ajouter, modifier, renommer ou supprimer une colonne. 13
Suppression logique d’une colonne. 13
Ajouter, renommer ou supprimer une contrainte. 14
Activer ou désactiver une contrainte. 15
Vérification des contraintes. 15
Supprimer et vider une table. 16
Changer le nom d’une table. 17
Ajouter des commentaires à une table ou une colonne. 17

Les vues ………………………………………………………………………….…. 18

Création et modification d’une vue. 18


Ordres du LMD sur une vue. 19
Vérification de l’existence d’une vue. 20
Suppression d’une vue. 20
Vue en ligne. 20

Les séquences …………………………………………………………………….. 22


Création d’une séquence. 22
Vérification de l’existence d’une séquence. 23
Utilisation d’une séquence. 23
Mise en mémoire cache des valeurs d’une séquence. 24
Attention aux trous dans les séquences. 24
Visualiser le prochain numéro de la séquence. 25
Modification d’une séquence. 25
Suppression d’une séquence. 25

Les indexs ………..………………………………….………………………...... 26


Création d’un index. 27
Vérification de l’existence d’un index. 27
Suppression d’un index. 27

manipulation des données

Manipulation de l’extension d’une table ……………………………… 28


Ajout de nouvelles lignes dans une table. 28
Mise à jour des lignes. 28
Suppression des lignes. 28

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 2


Transaction base de données …………………………………………………. 30
Définition d’une transaction. 30
Validation d’une transaction. 30
Annulation d’une transaction. 31

Le dictionnaire des données ………………………………………………… 32


Interrogation du dictionnaire de données.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 3


Définition des données

Les tables et les contraintes d’intégrité

Création des tables et des contraintes

CREATE TABLE [schéma.]nom_table ( <élément de la table> +)


[TABLESPACE nomTBS ];

schéma désigne le nom du propriétaire de la table.

<élément table> ::= <définition de colonne> | <contrainte de table>

<définition de colonne>::= <nom de colonne> <type de donnée>


[<clause défaut>] [<contrainte colonne>]

<type données> ::= CHAR(<longueur ou 1>)


VARCHAR2(<longueur ou 1>)
NUMBER[(p, s)]
Numériques approchés FLOAT, REAL, DOUBLE
PRECISION

<clause défaut> ::= DEFAULT expr

<contrainte colonne> ::= [CONSTRAINT nom_contrainte] <contrainte_type>

<contrainte_type> ::= NOT NULL


::= PRIMARY KEY
::= UNIQUE
::= REFERENCES <table référencée> [<colonne
référencée>]
::= CHECK <condition>

<contrainte de table> ::= [CONSTRAINT nom_contrainte] <contrainte_type>

<contrainte_type> ::=
UNIQUE <attribut>+
::=
FOREIGN KEY (<colonne référençante>+)]
REFERENCES <table référencée> [<colonne
référencée>][ON DELETE CASCADE]|[ON DELETE SET NULL]
::= CHECK <condition>

Les noms des tables, des colonnes et des contraintes doivent commencer par une lettre et faire de 1
à 30 caractères de long. Ils ne doivent contenir que les caractères A-Z, a-z, 0-9, _ (souligné), $,
et # (caractères autorisés mais leur utilisation est déconseillée).
Le nom ne doit pas déjà être utilisé par un autre objet appartenant au même utilisateur du serveur
Oracle. Le nom ne doit pas être un mot réservé de SQL.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 4


La valeur par défaut peut être une constante, une expression ou une fonction SQL comme
SYSDATE ou USER, mais cette valeur ne peut pas être le nom d’une autre colonne ou d’une
pseudo-colonne comme NEXTVAL ou CURRVAL. Les tables référencées dans une contrainte
doivent faire partie de la même base. Si la table n’appartient pas à l’utilisateur qui crée la contrainte,
il faut préfixer le nom de la table référencée par le nom de son propriétaire.

La commande SQL*PLUS DESCRIBE permet d’afficher la structure de la table.

Les types de données de base

Les principaux types de données sont : l’alpha-numérique, le numérique et le type date.

Type Description

VARCHAR2(taille) Alpha-numérique de longueur variable de longueur maximale


taille. Long. Minimale 1 et long. Maximale 2000 (4000 dans
Oracle 9i).
Ce type utilise uniquement le nombre d’octets nécessaires au
stockage de la valeur de colonne réelle.

CHAR(taille) Alpha-numérique de longueur taille fixe. La longueur par défaut est 1


et la longueur maximale est 255 octets (2000 dans Oracle 9i).

NUMBER Numérique point décimal flottant avec une précision de 38 chiffres


significatifs.

NUMBER(p,s) Valeur numérique ayant un total maximum de p chiffres, p compris


entre 1 et 38 dont s chiffres après la virgule, s est comprise entre 84 et
127.

DATE Date et heure comprise entre le 1er janvier 4712 Av. J.-C. et le 31
décembre 9999 Ap. J.-C. le serveur Oracle stocke les dates dans des
champs de longueur fixe de sept octets. Une date Oracle contient
toujours l’heure.

ROWID Système numérique en base 64 représentant l’adresse unique d’une ligne dans
sa table.

▪ Un ROWID n’est pas enregistré explicitement sous la forme d’une valeur de colonne.

▪ Un ROWID étendu (Oracle 8i et +) nécessite 10 octets de stockage sur disque et s’affiche


sur 18 caractères.
Numéro d’objet de données 32bits
Numéro de fichier relatif 10 bits
Numéro de bloc 22 bits
Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 5
Numéro de ligne 16 bits

▪ Un ROWID est stocké dans un index définissant des lignes ayant des valeurs de clé
spécifiques.

▪ Un ROWID permet de localiser n’importe quelle ligne dans une base de données.

Pilote Pilote_PK

1 …. AAABQMAAA 1
5 …. AAABQMAAA 5
6 …. AAABQMAAA 6
….

Select pilote.*, rowid


From pilote

Stockage des tables

Les tables sont par défaut créées dans le tablespace par défaut du propriétaire du schéma contenant
la table sinon dans le tablespace par défaut de la base.
Il est possible d’associer une table à un tablespace. Il est conseillé de placer les tables dans des
tablespaces distincts (…).

Exemple :

CREATE TABLE DEPT (


DEPTNO NUMBER(2) NOT NULL,
DNAME CHAR(14),
LOC CHAR(13),
CONSTRAINT DEPT_PRIMARY_KEY PRIMARY KEY (DEPTNO))
TABLESPACE data;

Les tablespaces sont créés par l’administrateur. Ce dernier accorde les quotas des tablespaces aux
différents utilisateurs.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 6


Types des contraintes déclaratives

Vous disposez de trois méthodes principales pour garantir l’intégrité des données :

• Le code application.
• Les déclencheurs de base de données ou triggers.
• Les contraintes d’intégrité déclaratives.

La présente section aborde l’utilisation des contraintes d’intégrité déclaratives.

Les contraintes d’intégrité devraient être renforcées par le serveur de la base de données ou
l’application. On peut utiliser les contraintes pour :

- Contrôler les règles au niveau de la table dès qu’une ligne est insérée, mise à jour ou
supprimée. La contrainte doit être satisfaite pour que l’opération s’effectue.
- Empêcher la suppression d’une table s’il y a des dépendances avec d’autres tables.
- Les récupérer dans des outils Oracle, comme Developper/2000.

On dispose de cinq types de contraintes déclaratives dont nous rappelons la syntaxe de déclaration

<contrainte_type> ::= UNIQUE <attribut>+


::= FOREIGN KEY (<colonne référençante>+)]
REFERENCES <table référencée> [<colonne référencée>]
[ON DELETE CASCADE]|[ON DELETE SET NULL]
::= CHECK <condition>

Contrainte NOT NULL :


- Définie au niveau d’une colonne
- Assure qu’il n’y aura pas de valeur NULL dans la colonne.

Contrainte UNIQUE :
- Désigne la ou les colonnes pour lesquels il ne pourra pas y avoir 2 lignes ayant la même
valeur pour cette clé
- Autorise les valeurs NULL si la contrainte UNIQUE ne porte que sur une seule colonne.
- Définie au niveau table ou colonne.
- Crée automatiquement un index UNIQUE.
- Une contrainte UNIQUE n’équivaut pas à une contrainte PRIMARY KEY.

Contrainte PRIMARY KEY :


- Crée la clé primaire d’une table ; une seule clé primaire est autorisée pour chaque table.
- Impose l’unicité des valeurs pour la clé.
- N’autorise les valeurs NULL dans aucune partie de la clé.
- Peut être définie au niveau table ou au niveau colonne.
- Une PRIMARY KEY composée est créée en utilisant la définition au niveau table.
- Crée automatiquement un index UNIQUE.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 7


Contrainte FOREIGN KEY :
- Désigne la ou les colonnes composant une clé étrangère.
- Etablit une relation avec une clé primaire ou unique dans la même table ou entre deux
tables.
- Définie soit au niveau table soit au niveau colonne.
- Une FOREIGN KEY composée est créée en utilisant la définition au niveau table.
- La valeur doit exister dans la table parent ou être NULL.

ON DELETE CASCADE indique que quand une ligne de la table parent est supprimée, les lignes
dépendantes dans la table enfant le sont aussi.
Sans l’option ON DELETE CASCADE, la ligne de la table parent ne peut pas être supprimée si
des lignes de la table enfant y font référence.
ON DELETE SET NULL affecte la valeur NULL aux clés étrangères lorsque la valeur parent est
supprimée.

Contrainte CHECK :
Définit une condition que chaque ligne doit respecter. Cette contrainte est définie soit au niveau
table soit au niveau colonne.
Expressions interdites :
- références aux pseudo-colonnes CURRVAL, NEXTVAL, LEVEL ou ROWNUM
- appels aux fonctions SYSDATE, UID, USER ou USERENV
- références à d’autres valeurs dans d’autres lignes

Gestion des contraintes déclaratives

Toutes les contraintes sont stockées dans le dictionnaire des données. Les contraintes sont faciles à
référencer si vous leur donnez un nom significatif. Si vous ne nommez pas votre contrainte, Oracle
génère un nom avec le format SYS_Cn, où n est un nombre entier pour créer un nom de contrainte
unique.

Nous rappelons qu’il existe deux niveaux de contraintes : les contraintes colonnes et les contraintes
tables.
Les contraintes tables ne permettent pas de définir des contraintes NOT NULL. Par contre elles
permettent de définir des contraintes sur plusieurs colonnes.

Les contraintes sont habituellement créées en même temps que la table. Des contraintes peuvent
être ajoutées, ou désactivées temporairement après la création de la table par la commande ALTER
TABLE.

CREATE TABLE xx (colonnes & contraintes colonnes)

CREATE TABLE xx (colonnes & contraintes colonnes


& Contraintes tables)

CREATE TABLE xx (colonnes et contraintes colonnes)


ALTER TABLE xx ADD CONSTRAINT …

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 8


Création des tables à partir d’une requête

La seconde méthode pour créer une table consiste à utiliser la clause AS sous-requête, à la fois pour
créer une table et en même temps la charger à partir des lignes ramenées par la requête.

CREATE TABLE [schéma.]nom table ( <élément de la table> +)


AS requête

La table sera créée avec les noms de colonnes spécifiés, les lignes ramenées par le SELECT seront
automatiquement insérées dans la table.

Exemple :

CREATE TABLE PILOTE (NUM,NOM,PRENOM, SALANNUEL)


AS select plnum, plnom, plprenom, salaire*12
From pilote;

La définition d’une colonne peut seulement contenir son nom, une valeur par défaut, et certaines
contraintes d’intégrité. Elle ne peut pas spécifier le type de données ou une contrainte d’intégrité
référentielle.
Enfin, le nombre de colonnes doit correspondre au nombre de colonnes ramenées en projection par
le SELECT.

Les colonnes de la nouvelle table auront pour nom celui des colonnes ramenées par la requête et
hériteront seulement de la contrainte NOT NULL des colonnes de la table interrogée.

Les tables peuvent être créées à n’importe quel moment. Sa structure peut être modifiée ‘on line’.

Les alias sont obligatoires pour les colonnes calculées (expressions).

Ajouter, modifier, renommer ou supprimer une colonne

Il est possible d’ajouter ou de modifier des colonnes.

ALTER TABLE <table>


ADD | MODIFY (colonne type_données [DEFAULT expr] [NOT NULL]
[,colonne type_données [DEFAULT expr] [NOT NULL]] +

Conditions d’ajouts :
- Si la table contient déjà des lignes, à l’ajout d’une nouvelle colonne, toutes les valeurs de
cette nouvelle colonne prendront la valeur NULL.
- Il n’est pas possible de spécifier l’emplacement de la nouvelle colonne. Celle-ci apparaît
automatiquement en dernière position de la structure de la table.

Les modifications possibles :


Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 9
- Augmenter la précision ou la taille d’une donnée numérique.
- Diminuer la taille d’une colonne uniquement si celle-ci ne contient pas de valeurs ou si la
table est vide sinon le système tronque les valeurs existantes s’il y a compatibilité entre
l’ancien et le nouveau type.
- Changer de type de données uniquement si la table est vide.
- Convertir une colonne CHAR en type de donnée VARCHAR2 ou inversement uniquement si
la colonne est vide et si la taille ne change pas.
- Changer la valeur par défaut d’une colonne n’affectera que les lignes insérées
ultérieurement.
- Ajouter la contrainte NOT NULL uniquement si la colonne ne contient pas de valeurs
NULL.

On ne peut pas modifier ou supprimer une colonne si elle est présente dans une vue, si elle sert dans
un index ou si une contrainte y fait référence.

Il est possible de renommer une colonne par la commande suivante :

ALTER TABLE <table>


RENAME COLUMN (ancNomColonne) TO (nouvNomColonne)

Il est possible de supprimer une colonne par la commande suivante :

ALTER TABLE <table>


DROP (colonne) [CASCADE CONSTRAINTS]

La suppression d’une colonne dans une table volumineuse prend énormément de temps.
L’option CASCADE CONSTRAINTS est requise s’il s’agit d’une colonne parent d’une relation de clé
étrangère.

Suppression logique d’une colonne

L’option SET UNUSED permet d’identifier une ou plusieurs colonnes comme non utilisées.
Ces colonnes sont supprimées logiquement pour être éventuellement supprimés physiquement plus
tard quand l’activité du système est faible.

Si vous marquez deux ou plusieurs colonnes comme non utilisées avant de les supprimer, les lignes
de la table ne seront mis à jour qu’une seule fois.

Les données des colonnes non utilisées ne sont plus accessibles par les interrogations SELECT et
notamment par la commande SELECT *.

La commande DESCRIBE ne permettra pas d’afficher le nom et le type des colonnes identifiées
comme non utilisées. Et vous pouvez ajouter à la table une colonne portant le même non qu’une
colonne non utilisée.

L’utilisateur peut ajouter une colonne portant le nom d’une colonne non utilisée.

ALTER TABLE <table>


SET UNUSED <colonne>

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 10


L’option DROP UNUSED COLUMNS permet de supprimer les colonnes identifiées comme non
utilisées.

ALTER TABLE <table>


DROP UNUSED COLUMNS

Les informations relatives à l’option SET UNUSED sont stockées dans la vue du dictionnaire
USER_UNUSED_COL_TABS.

Ajouter, renommer ou supprimer une contrainte

Il est possible d’ajouter ou de supprimer des contraintes sur des tables existantes. Il n’est par contre
pas possible de modifier une contrainte existante.

ALTER TABLE <table>


ADD [CONSTRAINT contrainte] type (colonne)

avec table : nom de la table sur laquelle est définie la contrainte.


contrainte : nom de la contrainte.
type : type de la contrainte.
colonne : colonne sur laquelle est définie la contrainte.

Dans la syntaxe, le nom de la contrainte est optionnel mais recommandé. Si la contrainte n’est pas
nommée, le système lui affectera systématiquement un nom.

Il est possible de renommer une contrainte par la commande suivante :

ALTER TABLE <table>


RENAME CONSTRAINT (ancNomContrainte) TO (nouvNomContrainte)

Quand vous supprimez une contrainte d’intégrité, cette contrainte n’est plus vérifiée par le serveur
Oracle et n’existe plus dans le dictionnaire de données.
Pour pouvoir supprimer une contrainte il faut d’abord retrouver son nom. Ceci est possible en
utilisant les vues USER_CONSTRAINTS et USER_CONS_COLUMNS du dictionnaire de données. Puis
supprimer la contrainte par la commande ALTER TABLE avec la clause DROP.

ALTER TABLE <table>


DROP PRIMARY KEY |
UNIQUE (colonne) |
CONSTRAINT contrainte [CASCADE]

avec table : nom de la table sur laquelle est définie la contrainte.


contrainte : nom de la contrainte.
colonne : colonne sur laquelle est définie la contrainte.

L’option CASCADE permet de supprimer toutes les contraintes dépendantes de celle-ci.

Activer et désactiver une contrainte


Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 11
Les contraintes peuvent être activées ou inhibées sans pour autant être supprimées grâce à la
commande suivante.

ALTER TABLE <table>


DISABLE | ENABLE CONSTRAINT contrainte [CASCADE CONSTRAINTS]

Règles :
- A l’activation d’une contrainte, les données concernées dans la table sont validées.
- L’activation d’une contrainte UNIQUE ou PRIMARY KEY, crée automatiquement un index
UNIQUE ou PRIMARY KEY.
- Les clauses ENABLE et DISABLE sont aussi utilisables dans la commande CREATE TABLE.
- L’option CASCADE CONSTRAINTS inhibe les contraintes dépendantes.

Une contrainte d’intégrité peut être activée ( ENABLE) ou désactivée (DISABLE). Si elle est activée,
les données sont contrôlées à leur entrée ou à leur mise à jour dans la base. Les données qui ne
répondent pas à la règle de la contrainte sont refoulées. Si la contrainte est désactivée il est possible
d’entrer des données non conformes dans la base.

Supprimer ou vider une table

DROP TABLE <nom de table> [CASCADE CONSTRAINT]

Règles :
- La table est supprimée et l’espace de stockage qu’elle utilise est libéré.
- Les vues, synonymes, procédures, fonctions ou packages stockés restent, mais sont
invalides.
- La transaction courante est validée.
- Seul le propriétaire ou l’utilisateur ayant le privilège DROP ANY TABLE peut supprimer
une table.
- CASCADE CONSTRAINT permet de supprimer en même temps les contraintes d’intégrité
référentielles dépendantes.

Cette commande est irréversible.

La commande TRUNCATE TABLE est utilisée pour supprimer toutes les lignes d’une table et libérer
l’espace de stockage utilisé par cette table. Elle vide également les indexes correspondants. Lors de
la prochaine insertion de nouvelles lignes dans la table, le serveur Oracle reprend les conditions de
stockage adoptées lors de la création de la table.

TRUNCATE TABLE <nom de table>

Seul le propriétaire de la table ou l’utilisateur ayant le privilège système DELETE TABLE peut
tronquer une table.

Si la table est le parent d’une contrainte d’intégrité référentielle, vous ne pouvez pas la vider. Il faut
tout d’abord désactiver la contrainte.
La commande DELETE permet aussi de supprimer les lignes d’une table, mais ne libère pas l’espace
de stockage utilisé par cette table.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 12


DELETE TABLE <nom de table>

Changer le nom d’une table

La commande RENAME est utilisée pour renommer une table, vue, séquence ou synonyme.

RENAME <ancien nom de la table> TO <nouveau nom de la table>

Seul le propriétaire de l’objet peut le renommer.

Ajouter des commentaires à une table ou une colonne

La commande COMMENT permet d’ajouter un commentaire de 2000 octets au maximum sur une
colonne, table ou vue. Le commentaire est stocké dans le dictionnaire de données.

COMMENT ON {TABLE table | COLUMN table.colonne}


IS ‘texte’

Pour effacer un commentaire utiliser la chaîne vide.


Les commentaires peuvent être visualisés par le biais des vues du
dictionnaire ALL_COL_COMMENTS, USER_COL_COMMENTS, ALL_TAB_COMMENTS,
USER_TAB_COMMENTS.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 13


Définition des données

Les vues ou schémas logiques externes

Avec le concept de vue on peut cataloguer un ordre SELECT sous un nom dans le dictionnaire de
données et « faire croire que c’est une table ».
Une vue ne contient pas de données, c’est un peu comme une fenêtre au travers de laquelle on peut
visualiser et modifier les données des tables.
Ainsi, une vue est une table logique basée sur une table ou une autre vue.

La construction des vues présente plusieurs avantages :


- La programmation est simplifiée pour l’utilisateur puisqu’une partie de l’ordre SELECT est
déjà codée dans la vue ;
- Les vues permettent de protéger finement l’accès aux tables en fonction des utilisateurs. On
utilise une vue partielle sur une ou plusieurs tables et on interdit l’accès aux tables
principales. C’est l’un des moyens les plus efficaces de protection des données.
- C’est la vue qui offre l’indépendance logique à chaque utilisateur : chacun peut voir les
données comme il le souhaite.

Création et modification d’une vue

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW <nom_vue>


[<alias>+)]
AS <requête>
[WITH CHECK OPTION [CONSTRAINT contrainte]]
[WITH READ ONLY [CONSTRAINT contrainte]]

avec OR REPLACE : recré la vue si elle existe déjà.


FORCE : crée la vue sans vérifier que les tables existent.
NOFORCE : crée la vue seulement si les tables de base existent. C’est
la valeur par défaut.
nom_vue : nom de la vue.
alias : spécifie les noms des expressions ramenées par la sous-
interrogation de la vue.
requête : instruction SELECT. Vous pouvez utiliser des alias dans
le SELECT liste.
WITH CHECK OPTION : spécifie que seules les lignes accessibles par la vue
peuvent être insérées ou modifiées.
contrainte : nom donné à la contrainte WITH CHECK OPTION.
WITH READ ONLY : garantit qu’aucun ordre du LMD ne pourra être utilisé sur
la vue.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 14


On ne peut pas spécifier de clause ORDER BY. En effet cette clause sera spécifiée au moment où la
vue sera interrogée.
Indications à suivre :
- La requête peut contenir une syntaxe complexe (jointures, groupes et sous-interrogations).
- La requête ne peut pas contenir un ORDER BY.
- Utiliser la clause OR REPLACE pour modifier la définition d’une vue sans avoir à la
supprimer et la recréer et donc sans avoir à redonner les privilèges sur cette vue.

Exemple :
CREATE VIEW VOL_TUNIS
AS SELECT *
FROM VOL
WHERE UPPER(VILLEDEP) = ‘TUNIS’

Décrire la structure d’une vue avec la commande DESCRIBE :


DESCRIBE VOL_TUNIS

La vue est calculée dynamiquement à chaque exécution d’une requête qui y fait référence.
La requête suivante affiche les données de la vue avec un ordre SELECT :
SELECT *
FROM VOL_TUNIS
ORDER BY VOLNUM

La clause WITH CHECK OPTION assure qu’à chaque utilisation de la vue (en modification ou en
suppression), le critère de sélection de la clause WHERE est vérifié.
La clause WCO précise que les opérations d’insertion (INSERT) et de mise à jour (UPDATE)
exécutées dans une vue n’autorisent pas la création de lignes que la vue ne peut pas sélectionner par
conséquent elle permet d’appliquer des contrôles de validation sur les données à insérer ou à mettre
à jour.
Nous vérifions qu’il n’y a pas de définition d’intégrité au niveau d’une vue (on ne parle pas
d’intégrité de vue mais d’intégrité de relation de base).

Ordres du LMD sur une vue

Pour faire une mise à jour sur une vue, il doit être possible de propager la mise à jour sur les tables
de base ou tables sources. Une vue qui ne respecte pas ces critères est dite en lecture seule.
Les ordres INSERT, DELETE et UPDATE ne peuvent s’appliquer qu’à une vue n’utilisant qu’une
seule table en respectant les trois règles suivantes.

1) Il est possible de supprimer une ligne au travers d’une vue sauf si elle a été construite à
partir d’un des éléments suivants :
- jointure
- fonctions de groupe
- clause GROUP BY ou HAVING
- option DISTINCT ou une function sur colonne
- la pseudo colonne ROWNUM
- les opérateurs ensemblistes INTERSECT, UNION, EXCEPT.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 15


2) Il est possible de modifier les données au travers d’une vue sauf si les éléments précédents
ne sont pas vérifiés ou et si les colonnes sont issues d’une expression, par exemple
SALAIRE*12.

3) Il est possible d’insérer des données au travers d’une vue sauf si elle est basée sur l’un des
éléments cités ci-dessus ou si l’une des colonnes NOT NULL de la table de base n’est pas
ramenée par la vue. Toutes les colonnes obligatoires doivent être présentes dans la vue.

Un des moyens les plus fréquents utilisés pour résoudre les problèmes de mise à jour sur les vues
consiste à utiliser les procédures stockées. Ces procédures sont généralement écrites en PL/SQL et
enregistrées sur le serveur et regroupant plusieurs opérations de base. On utilise ainsi les vues pour
les sélections et la procédure stockées pour les mises à jour.

Vérification de l’existence d’une vue

Il est possible de vérifier le nom et la définition des ordres SELECT associés aux vues en
interrogeant la vue USER_VIEWS du dictionnaire de données.

USER_VIEWS ( VIEW_NAME,
TEXT_LENGTH,
TEXT
)

« Afficher le nom et la description de toutes les vues qui appartiennent à l’utilisateur courant. »

SELECT VIEW_NAME, TEXT


FROM USER_VIEWS

Suppression d’une vue

Seul le propriétaire ou les utilisateurs ayant le privilège DROP ANY VIEW ont le droit de
supprimer une vue.

DROP VIEW <nom_vue>

Cette commande supprime la définition de la vue du dictionnaire de données.


La suppression d’une vue n’affecte pas les tables sur lesquelles elle est définie. Les applications
et/ou les autres vues basées sur cette vue deviennent invalides.

Vue en ligne

Une vue en ligne est une sous-interrogation intégrant un alias (ou nom de corrélation) que vous
pouvez utiliser dans une instruction SQL.
Une sous-interrogation nommée, contenue dans la clause FROM de l’interrogation principale est un
exemple de vue en ligne.

SELECT a.plnom, a.salaire

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 16


FROM PILOTE a, (SELECT ville, MAX(salaire)
FROM PILOTE
GROUP BY ville
) b
WHERE a.salaire < b.salaire
AND a.ville = b.ville

Le texte de cette requête est « Nom et salaire des pilotes gagnant moins que le salaire maximum des
pilotes de leur ville ».

Un autre cas est celui des analyses de type N-premiers.


Soit la requête suivante : « Quels sont les 5 premiers pilotes inscrits dans la base? »

SELECT Plnum, Plnom


FROM PILOTE
WHERE rownum <= 5

La requête suivante « Quels sont les 5 premiers pilotes les mieux payés? »

SELECT Rownum, e.Plnom, e.salaire


FROM (SELECT plnom, salaire
FROM PILOTE
ORDER BY salaire desc) e
WHERE Rownum <= 5

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 17


Définition des données

Les séquences

Une séquence peut être utilisée pour générer des numéros séquentiels à insérer dans les lignes d’une
table.
Une séquence est un objet de la base de données créée par un utilisateur et peut être partagée entre
plusieurs utilisateurs.

L’utilisation classique des séquences est de produire les valeurs d’une clé primaire, qui doit être
différente pour chaque ligne. Le numéro est généré et incrémenté ou décrémenté par une routine
interne de Oracle. Cet objet peut vous permettre de gagner du temps étant donné qu’il ne nécessite
aucune programmation pour l’utilisateur.

Les numéros de séquence sont stockés et générés indépendamment des tables. Ainsi, la même
séquence peut être utilisée par plusieurs tables.

Création d’une séquence

CREATE SEQUENCE <nom de sequence>


[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}]

avec INCREMENT BY n : spécifie l’intervalle entre les numéros de séquence, où n


est un entier. Par défaut le pas d’incrémentation est de 1.

START WITH n : spécifie le premier numéro de la séquence qui sera


généré. Si cette clause est omise la séquence
commencera par 1.

MAXVALUE n : spécifie la valeur maximale que pourra atteindre la


séquence. 1 ou 1027.

MINVALUE n : spécifie la valeur minimale que pourra atteindre la


séquence.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 18


NOMINVALUE : revient à spécifier la valeur minimale à 1 pour une
séquence croissante et 1026 pour une séquence
décroissante.

CYCLE | NOCYCLE : avec CYCLE, la séquence continuera à générer des


numéros même après avoir atteint le maximum (ou le
minimum) en repartant de la valeur minimum (ou
maximum). NOCYCLE interdit de continuer à générer
des valeurs quand le maximum (ou minimum) est atteint.
L’option par défaut est NOCYCLE.

CACHE n | NOCACHE : Indique combien de valeurs seront pré-allouées et


conservées en mémoire par le serveur Oracle. La valeur
par défaut est 20.

Ne pas utiliser CYCLE si la séquence est utilisée pour générer des valeurs de clés primaires.

Vérification de l’existence d’une séquence

Une fois créée la séquence est visible à partir de la vue USER_OBJECTS.


La vue USER_SEQUENCES du dictionnaire de données permet de vérifier les valeurs des séquences.

USER_SEQUENCES ( SEQUENCE_NAME,
MIN_VALUE,
MAX_VALUE,
INCREMENT_BY,
LAST_NUMBER
)
« Créer la séquence PILOTE_ID qui sera utilisée pour renseigner la colonne PLNUM de la table
PILOTE. Faire commencer la séquence par le numéro 51 sans cache ni cycle. »

CREATE SEQUENCE PILOTE_ID


INCREMENT BY 1
START WITH 1
MAVVALUE 9999999
NOCACHE
NOCYCLE

Utilisation d’une séquence

Une fois la séquence créée, vous pouvez l’utiliser pour générer des numéros séquentiels dans vos
tables. Les valeurs générées par la séquence sont référencées au travers de deux pseudo-colonnes :
NEXTVAL et CURRVAL.

Séquence.NEXTVAL : Retourne le numéro de séquence suivant.


Retourne une valeur unique à chaque fois, même si utilisée par
plusieurs utilisateurs.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 19


Séquence.CURRVAL : Donne le numéro de séquence courant.

Dès que vous référencez séquence.NEXTVAL, un nouveau numéro de séquence est généré et le
numéro de séquence courant est placé dans CURRVAL.

« Insérer un nouveau pilote nommé SERGE MIRANDA »


INSERT INTO PILOTE (PLNUM, PLNOM, PLPRENOM)
VALUES (PILOTE_ID.NEXTVAL, ‘Miranda’, ‘Serge’)

« Consulter la valeur courante de la séquence PILOTE_ID »


SELECT PILOTE_ID.CURRVAL
FROM DUAL

Vous pouvez utiliser NEXTVAL et CURRVAL dans :


- La ‘SELECT liste’ dans un ordre SELECT qui n’est pas une sous-interrogation.
- La ‘SELECT liste’ d’une sous-interrogation d’un ordre INSERT.
- La clause VALUES d’un ordre INSERT.
- La clause SET d’un ordre UPDATE.

Vous ne pouvez pas utiliser NEXTVAL et CURRVAL dans :


- La ‘SELECT liste’ d’une vue.
- L’ordre SELECT avec l’option DISTINCT.
- L’ordre SELECT avec les clauses GROUP BY, HAVING ou ORDER BY.
- Une sous-interrogation dans un ordre SELECT, DELETE ou UPDATE.
- Dans la clause DEFAULT de la commande CREATE TABLE ou ALTER TABLE.

Mise en mémoire cache des valeurs de la séquence

Les numéros de séquence peuvent être montés en mémoire cache pour avoir un accès plus rapide.
C’est au premier appel de la séquence que les numéros sont montés en mémoire. Chaque demande
de la valeur suivante de la séquence est recherchée en mémoire. Dès que tous les numéros sont
utilisés, c’est l’appel de la valeur suivante qui provoquera la montée en mémoire cache d’une autre
série de numéros.

Attention aux « trous » dans la séquence

Les séquences sont indépendantes des COMMIT et des ROLLBACK. Ainsi, si vous faites un
ROLLBACK par exemple sur un INSERT dans lequel vous avez utilisé une séquence, la ligne insérée
sera bien annulée mais le numéro de séquence sera perdu.

Un problème système, peut également provoquer des « trous » dans la séquence. Si l’option CACHE
a été utilisée, en cas de problème système toutes les valeurs présentes en mémoire cache seront
perdues.

Les séquences ne sont pas directement liées aux tables dans lesquels elles sont utilisées, la même
séquence peut donc être utilisée pour renseigner plusieurs tables. Si vous l’utilisez de cette façon,
chaque table pourra avoir des « trous » dans les numéros de séquence.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 20


Visualiser le prochain numéro de la séquence

Il est possible de visualiser le prochain numéro de séquence disponible sans pour autant la faire
avancer, à condition d’avoir créé la séquence avec l’option NOCACHE, en interrogeant la vue
USER_SEQUENCES.

SELECT LAST_NUMBER
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = ‘PILOTE_ID’.

Modification d’une séquence

Si vous atteignez la limite maximum (MAXVALUE) de la séquence, aucune autre valeur ne pourra
être attribuée et vous recevrez un message indiquant que la séquence ne peut dépasser MAXVALUE.
Pour pouvoir continuer à utiliser la séquence vous pouvez en modifier les caractéristiques en
utilisant la commande ALTER SEQUENCE.

ALTER SEQUENCE <nom de sequence>


[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}]

Nous vérifions que :


- L’utilisateur doit être propriétaire ou avoir le privilège ALTER sur la séquence pour pouvoir
la modifier.
- Seuls les prochains numéros attribués par la séquence seront affectés par la commande
ALTER SEQUENCE.
- Certaines vérifications seront effectuées. Par exemple une nouvelle valeur du paramètre
MAXVALUE ne peut pas être inférieure au dernier numéro de séquence attribué.
- L’option START WITH ne peut pas être changée par ALTER SEQUENCE. La séquence doit
être supprimée puis recréée pour la faire repartir d’un autre numéro.

Suppression d’une séquence

Pour supprimer une séquence du dictionnaire de données, vous devez être propriétaire ou avoir le
privilège DROP ANY SEQUENCE.

DROP SEQUENCE <nom de sequence>

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 21


Définition des données

Les indexs

Les objets décrits précédemment suffisent théoriquement à l’élaboration d’une base de données.
Néanmoins, en pratique il est nécessaire de disposer de méthodes d’accès efficaces.

Trois méthodes principales sont utilisées pour retrouver les données sous Oracle :
- Balayage complet de la table.
- Recherche à travers un index puis accès direct par adresse.

En cas d’absence d’index sur une colonne, la table est parcourue dans son intégralité.

Qu’est ce qu’un index ?


- Un objet de la base. Il occupe un espace mémoire non négligeable.
- Utilisé par le serveur Oracle pour accélérer l’accès aux lignes d’une table par le biais d’un
pointeur.
- Est externe à la table indexée.
- Est mis à jour automatiquement lors de chaque mise à jour de la table par le serveur
Oracle. Les performances peuvent donc être affectées.

Comment sont créés les index ?


- Un index UNIQUE est automatiquement créé quand vous définissez une PRIMARY KEY ou
une contrainte UNIQUE sur une colonne.
- Les utilisateurs peuvent créer des index non uniques pour accélérer la recherche des
enregistrements.

Choix d’utilisation d’un index :


- Le serveur Oracle utilise un index pour accéder rapidement aux données de la table.
- La création ne peut se faire sur une vue.
- Cette utilisation est automatique et ne demande aucune intervention de l’utilisateur.
- Le serveur utilise l’une de ses deux méthodes d’optimisation :
Rule_based (optimiseur syntaxique)
Cost_based (optimiseur statistique)

Structure d’un index :


- Le serveur Oracle utilise la structure de l’arbre équilibré B*TREE pour les index.
- Chaque index est composé des valeurs des colonnes et de pointeurs (ROWID) qui sont
organisées en branches.
- Le Serveur parcourt les branches de l’arbre jusqu’à ce qu’il trouve la feuille, avec la valeur
que contient le pointeur.

Type d’index :
- Unique : garantit l’unicité des valeurs d’une colonne.
- Non-unique : accélère la recherche.
- Mono-colonne : il est composé d’une seule colonne.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 22


- Concaténé ou Composé : il est composé de plusieurs colonnes cités par ordre
d’importance.

Les types d’index ne sont pas mutuellement exclusifs. Par exemple, il est possible de créer un
index unique composé.

Création d’index

CREATE [UNIQUE] INDEX <index>


ON table (colonne [asc/desc][, colonne]+)

avec index : nom de l’index


table : nom de la table
colonne : nom de la colonne de la table à indexer.

Beaucoup d’index sur une table n’optimise pas forcément les performances des requêtes. De plus,
chaque ordre du LMD validé demande une mise à jour des index associés à la table.

avec UNIQUE : précise si les valeurs des colonnes indexées sont uniques ou non.
asc/desc : précise si les valeurs de la colonne doivent être triées de façon
ascendante ou descendante.

Il FAUT créer un index :

- sur une colonne fréquemment utilisée telle que une clé primaire, une clé étrangère, un
attribut de jointure, critère de sélection dans un prédicat ;
- sur une colonne contenant un nombre important de valeurs distincts ;
- sur une colonne contenant beaucoup de NULL ;
- sur deux ou plusieurs colonnes utilisées simultanément dans un prédicat ou pour réaliser
une jointure ;
- sur une table importante où la plupart des requêtes ramènent moins de 10 à 15% des lignes
de la table.

L’index doit être judicieusement choisi au regard des analyseurs de requête. En général, il est
conseillé de ne pas créer plus de trois index par table.

Il NE FAUT PAS créer d’index :

- si la table est petite ;


- si les colonnes ne sont pas souvent utilisées dans les prédicats ;
- si la plupart des requêtes ramènent plus de 10 à 15% des lignes de la table ;
- si la colonne indexée est souvent mise à jour.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 23


Vérification de l’existence d’un index

Il est possible de vérifier l’existence des indexes partir de la vue USER_INDEXES du dictionnaire de
données.
Pour vérifier les colonnes participant à l’index, il faut interroger la vue USER_IND_COLUMNS.

Suppression d’un index

Pour changer un index, il faut le supprimer et le créer de nouveau.

Seul le propriétaire ou les utilisateurs ayant le privilège DROP ANY INDEX ont le droit de
supprimer un index.

DROP INDEX <index>

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 24


Manipulation des données

Le langage de manipulation de données (LMD) est une partie essentielle du langage SQL. Pour
ajouter, modifier ou supprimer des données dans la base, vous utiliserez une commande du LMD.
Un ensemble d’instructions du LMD que vous n’avez pas encore validées est appelé transaction, ou
unité logique de travail.

Ajout de nouvelles lignes dans une table

INSERT INTO <nom de table> [(colonne [, colonne]+)]


VALUES (constante [, constante]+)

Avec cette syntaxe on ne peut insérer qu’une seule ligne à la fois.


La valeur NULL est utilisée systématiquement pour les attributs non cités.
Une constante manquante peut être remplacée soit par le mot clé NULL soit par la chaîne vide ‘’
pour les types date ou chaînes de caractères.
La fonction USER donne le nom de l’utilisateur courant.
La fonction SYSDATE retourne la date et l’heure courante.

Il est possible de définir une instruction de sélection générique en employant des variables de
substitution.

INSERT INTO PILOTE (PLNUM, PLNOM)


VALUES (&num, &nom)

Il est possible d’exécuter autant de fois cette instruction et fournir à chaque fois des valeurs
différentes.

Il est possible d’utiliser la commande INSERT pour ajouter des lignes dans une table dont les
valeurs proviennent d’une autre table.

INSERT INTO <nom de table> [(colonne [, colonne]+)]


<ordre SELECT>

Mise à jour des lignes

UPDATE <nom de table>


SET {<nom de colonne> = {<expression de valeurs> | NULL}}+
WHERE {<condition de recherche> | CURRENT OF <nom de curseur>}

La condition de recherche identifie les lignes à modifier.


Tous les tuples seront modifiés si la condition WHERE n’est pas spécifiée.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 25


Si vous tentez de mettre à jour un enregistrement sans respecter les contraintes d’intégrité, une
erreur se produira.

Suppression de lignes

DELETE FROM <nom de table>


[WHERE <condition de recherche> | CURRENT OF <nom de curseur>}]

Tous les tuples seront supprimés si la condition WHERE n’est pas spécifiée.
Si vous essayez de supprimer une ligne contenant une clé primaire utilisée comme clé étrangère
dans une autre table, la contrainte d’intégrité provoquera une erreur.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 26


Manipulation des données

Transaction base de données

Une transaction est un ensemble de modifications de la base qui forment un tout indivisible. Il faut
effectuer ces modifications entièrement ou pas du tout sous peine de laisser la base dans un état
incohérent.

Exemple :
Un transfert de fonds doit se traduire par le débit sur un compte et le crédit sur un autre
compte du même montant. Les deux actions doivent réussir ou échouer. Le crédit ne doit pas
être validé si le débit ne l’est pas.

Au cours d’une transaction l’utilisateur travaille sur une copie privée des tables qu’il modifie : ainsi
il est le seul à voir les modifications qu’il a effectuées. Pour rendre ces modifications effectuées
pour l’ensemble des utilisateurs il doit les valider.
Une transaction est soit validée soit annulée.

Validation d’une transaction

Une transaction est validée explicitement avec la commande COMMIT ou implicitement à la sortie
définitive par EXIT.

COMMIT
Termine la transaction en validant définitivement les données modifiées.

Un COMMIT automatique est déclenché sur les événements suivants :


- exécution d’une commande LDD (exemple CREATE)
- exécution d’une commande du LCD (exemple GRANT)
- une sortie normale de SQL*PLUS sans avoir effectué de COMMIT ou de ROLLBACK
explicite.

Etat de données AVANT un COMMIT :


- L’état des données avant modification peut être retrouvé.
- L’utilisateur courant peut visualiser le résultat de ses commandes LMD en utilisant l’ordre
SELECT.
- Les autres utilisateurs ne peuvent pas voir les résultats des commandes LMD effectuées
par l’utilisateur courant.
- Les lignes touchées sont verrouillées, les autres utilisateurs ne peuvent pas modifier ces
mêmes lignes.

Etat de données APRES un COMMIT :


- Les données modifiées sont écrites dans la base de données.
- Les données précédentes sont définitivement perdues.
- Tous les utilisateurs peuvent visualiser les résultats.
Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 27
- Les lignes sont déverrouillées ; elles peuvent maintenant être modifiées par d’autres
utilisateurs.

Annulation d’une transaction

Une transaction est annulée explicitement par la commande ROLLBACK ou implicitement à la fin
anormale d’une tâche utilisateur.

ROLLBACK
Termine la transaction en annulant toutes les modifications effectuées non
encore validées. Un ROLLBACK automatique est déclenché sur une sortie anormale
de SQL*PLUS ou sur une erreur système.

Etat de données APRES un ROLLBACK :


- Les modifications sont annulées. L’état des données avant modification est retrouvé.
- Les verrous posés sur les lignes touchées par les modifications sont retirés.

Les commandes SAVEPOINT et ROLLBACK TO SAVEPOINT permettent une annulation partielle


des modifications.

SAVEPOINT nom :
Pose une étiquette dans la transaction courante.

ROLLBACK [TO SAVEPOINT] nom :


Annule les modifications effectuées depuis la pose de l’étiquette nom par l’ordre
SAVEPOINT.

Si vous posez une étiquette de même nom qu’une étiquette posée auparavant, cette dernière sera
supprimée.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 28


Définition des données

Le Dictionnaire de Données Oracle

La plupart des SGBD gèrent la majorité de leurs propres informations dans un catalogue de tables
appelé métabase ou dictionnaire de données.
Le dictionnaire de données est l’un des composants principaux du serveur Oracle. Il est constitué
d’un ensemble de tables et de vues utilisables seulement en lecture et qui contiennent toutes les
informations portant sur la base de données. Les tables du dictionnaire de données sont rarement
accédées directement en raison de la complexité des informations qui y sont stockées.
Habituellement l’utilisateur interroge le dictionnaire de données au travers de vues qui présentent
les informations sous une forme plus facile à utiliser.

La mise à jour du dictionnaire SGBD lui-même en fonction des requêtes de création ou de gestion
des droits que chaque utilisateur fait.

Toutes les tables du dictionnaire de données appartiennent au compte SYS d’administration


d’Oracle.

Interrogation du Dictionnaire de données

Vous pouvez interroger le dictionnaire de données en utilisant la commande SQL SELECT.


En fonction de vos privilèges, vous pouvez interroger différentes vues.

Nom de la vue Description

DICTIONARY : Donne toutes les tables, vues et synonymes du dictionnaire des données
accessibles par l’utilisateur.
TABLE_PRIVILEGES : Privilèges sur les objets pour lesquels l’utilisateur a reçu ou donné des droits
ou dont il est propriétaire.
IND : C’est un synonyme pour la vue USER_INDEXES.

« Retrouver la structure du catalogue du dictionnaire »


DESCRIBE DICT

« Liste de toutes les vues du Dictionnaire de données accessibles par l’utilisateur »


SELECT *
FROM DICT

« Retrouver toutes les vues du dictionnaire se rapportant au mot clé ‘grant’ »


SELECT *
FROM DICT
WHERE LOWER(comments) LIKE ‘%grant%’

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 29


Pour voir la description de chaque colonne des tables ou vues du dictionnaire de données, il faut
utiliser la vue DICT_COLUMNS.

« Description des colonnes de la vue USER_OBJECTS »


DESCRIBE USER_OBJECTS ;

SELECT column_name, comments


FROM DICT_COLUMNS
WHERE table_name = ‘USER_OBJECTS’

Catégories des vues du Dictionnaire de données

Sous Oracle existe trois catégories de vues. Chaque catégorie a un préfixe particulier.

DBA_XXX : tous les objets de la base de données

ALL_XXX : objets accessibles à l’utilisateur en cours

USER_XXX : objets appartenant à l’utilisateur en cours

USER_… : Les vues commençant par ce préfixe, contiennent les objets appartenant à l’utilisateur.
Par exemple, les vues ayant ce préfixe permettent à l’utilisateur de visualiser les informations
concernant les tables qu’il a créés et les privilèges qu’il a octroyés :
USER_OBJECTS, USER_CONSTRAINTS, USER_COL_COMMENTS, USER_TABLE_COMMENTS,
USER_CONS_COLUMNS

« Vérifier les contraintes de la table PILOTE »


SELECT constraint_name, constraint_type
FROM USER_CONSTRAINTS
WHERE table_name = ‘PILOTE’;

ALL_… : Donnent des informations sur les objets sur lesquels l’utilisateur a reçu des droits d’accès
et sur ceux qui lui appartiennent.
ALL_COL_COMMENTS, ALL_TAB_COMMENTS.

« Retrouver toutes les vues du dictionnaire préfixée par ALL »


SELECT table_name
FROM DICT
WHERE upper(table_name) like ‘ALL%’;

DBA_… : Permettent aux utilisateurs ayant le privilège DBA de retrouver les informations concernant
tous les objets de la base de données.

VS_… : Montrent les performances et le verrouillage de la base de données. Initialement, seulement


accessibles aux DBA.

Le langage SQL - Extrait du manuel du stagiaire © Faten Labbene Ayachi 30

Vous aimerez peut-être aussi