Vous êtes sur la page 1sur 243

Cours de

Systmes de Gestion
des Bases de Donnes
Institut Suprieur dInformatique de Mahdia AU : 2011-2012
Propos par : Riadh HADJ MTIR
Riadh.hadjmtir@riadi.rnu.tn
Classe : LAI2
Objectifs du cours
Comprendre larchitecture du SGBD Oracle
Construire une base de donnes sous Oracle
Administrer une base de donnes
Manipuler les donnes avec SQL
Ecrire des programmes en PL/SQL


La mise en pratique en TP
Riadh HADJ MTIR 2011/2012 2
Plan du cours
Introduction
Administration dune BD Oracle
Le langage SQL
Le langage PL/SQL
Riadh HADJ MTIR 2011/2012 3



Introduction Gnrale
Riadh HADJ MTIR 2011/2012 4
Un systme de gestion de bases de donnes (SGBD)
est un logiciel qui permet dinteragir avec une base de
donnes
Un SGBD est un logiciel permettant de :
- Dcrire - la confidentialit
- Manipuler en assurant - lintgrit
- Consulter les donnes - la scurit
- Dfinir des contraintes dintgrits - le partage des donnes

Riadh HADJ MTIR 2011/2012 5
Introduction
SGBD
Indpendance physique (1) : Plus besoin de travailler
directement sur les fichiers physiques (tels quils sont
enregistrs sur disque).
Un SGBD nous permet de dcrire les donnes et les liens
entre elles dune faon logique sans se soucier du comment
cela va se faire physiquement dans les fichiers. On parle alors
dimage logique de la base de donnes, (ou aussi description
logique ou conceptuelle ou encore de schma logique).
Ce schma est dcrit dans un modle de donnes par
exemple le modle de tables, appel le modle relationnel.

Riadh HADJ MTIR 2011/2012 6
Introduction
Objectifs des SGBD
Indpendance physique (2) : La manipulation des donnes doit tre
facilite en travaillant directement sur le schma logique. On peut insrer,
supprimer, modifier des donnes directement sur limage logique. Le SGBD
va soccuper de faire le travail sur les fichiers physiques.

Indpendance logique : Un mme ensemble de donnes peut tre vu
diffremment par des utilisateurs diffrents. Toutes ces visions personnelles
des donnes doivent tre intgrs dans une vision globale.

Manipulations des donnes par des non informaticiens : Il faut pouvoir
accder aux donnes sans savoir programmer, ce qui signifie des langages
quasi naturels .

Efficacit des accs aux donnes : Ces langages doivent permettre
dobtenir des rponses aux interrogations en un temps raisonnable . Il
doivent donc tre optimiss et, entre autres, il faut un mcanisme
permettant de minimiser le nombre daccs disques. Tout ceci, bien sur, de
faon compltement transparente pour lutilisateur.
Riadh HADJ MTIR 2011/2012 7
Introduction
Objectifs des SGBD (2)
Administration centralise des donnes : Des visions diffrentes des
donnes (entre autres) se rsolvent plus facilement si les donnes sont
administres de faon centralise.

Cohrence des donnes : Les donnes sont soumises un certain
nombre de contraintes dintgrit qui dfinissent un tat cohrent de la
base. Elles doivent pouvoir tre exprimes simplement et vrifies
automatiquement chaque insertion, modification ou suppression de
donnes, par exemple :
lge dune personne suprieur zro
Salaire suprieur zro
Etc.
Ds que lon essaye de saisir une valeur qui ne respecte pas cette
contrainte, le SGBD le refuse.
Riadh HADJ MTIR 2011/2012 8
Introduction
Objectifs des SGBD (3)
Non redondance des donnes : Afin dviter les problmes lors des mises
jour, chaque donne ne doit tre prsente quune seule fois dans la base.

Partageabilit des donnes : Il sagit de permettre plusieurs utilisateurs
daccder aux mmes donnes au mme moment. Si ce problme est
simple rsoudre quand il sagit uniquement dinterrogations et quand on
est dans un contexte monoutilisateur, cela nest plus le cas quand il sagit
de modifications dans un contexte multiutilisateurs.
Il sagit alors de pouvoir :
Permettre deux (ou plus) utilisateurs de modifier la mme donne en mme
temps ;
Assurer un rsultat dinterrogation cohrent pour un utilisateur consultant une
table pendant quun autre la modifie.
Riadh HADJ MTIR 2011/2012 9
Introduction
Objectifs des SGBD (4)
Scurit des donnes : Les donnes doivent pouvoir tre protges
contre les accs non autoriss.
Pour cela, il faut pouvoir associer chaque utilisateur des droits daccs
aux donnes.

Rsistance aux pannes : Que se passetil si une panne survient au milieu
dune modification, si certains fichiers contenant les donnes deviennent
illisibles?
Les pannes, bien qutant assez rares, se produisent quand mme de
temps en temps. Il faut pouvoir, lorsque lune delles arrive, rcuprer une
base dans un tat sain .
Ainsi, aprs une panne intervenant au milieu dune modification deux
solutions sont possibles :
soit rcuprer les donnes dans ltat dans lequel elles taient avant la
modification,
soit terminer lopration interrompue.
Riadh HADJ MTIR 2011/2012 10
Introduction
Objectifs des SGBD (5)

Description des donnes : codification structuration, grce un
Langage de Description de Donnes (LDD)

Manipulation et restitution des donnes (insertion, mise jour,
interrogation)
Mise en oeuvre laide dun Langage de Manipulation de Donnes
(LMD)
S.Q.L. (Structures Query Langage) : Langage standard

Contrle (partage, intgrit, confidentialit, scurit)
Schma = structure + contraintes
Formule logique (E.g. Nom character 20, non NULL; age integer
between 0 and 120; debit <= credit).
But: protger les donnes
Riadh HADJ MTIR 2011/2012 11
Introduction
Fonctionnalits dun SGBD
Riadh HADJ MTIR 2011/2012 12
Introduction
vision simplifie dun SGBD
SGBD externe
SGBD interne
Gestionnaire de fichiers
Programmes
Terminaux
Riadh HADJ MTIR 2011/2012 13
Introduction
Architecture fonctionnelle dun SGBD
Architecture Ansi/Sparc 3 niveaux:
Niveau externe: le niveau dexpression des besoins des users. Il
formalise la manire dont les utilisateurs voient les donnes.
Environnement de programmation / interfaces graphiques /
deboggueurs /
Niveau conceptuel: dcrit la structure de la base de donnes
globalement tous les utilisateurs (limite la redondance) .
Compilation / optimisation des requtes / maintien de lintgrit /
gestion de la confidentialit.
Niveau interne: relatif la mmoire physique
Gestion de la mmoire secondaire (fichiers), schma, index
Gestion de la concurrence
Reprise aprs panne
Riadh HADJ MTIR 2011/2012 14
Introduction
Architecture niveaux ANSI/SPARC
Schma A Schma B Schma C
Description
Unique
Niveau Externe
(vue dun user)
Correspondance
externe/conceptuelle
Niveau Conceptuel
Schma interne
Correspondance
Conceptuelle/physique
Niveau I nterne
(vue physique)
Riadh HADJ MTIR 2011/2012 15
Introduction
Avantages de la sparation en 3 niveaux
Indpendance physique: on peut modifier lorganisation des
donnes sans toucher les programmes de traitement.
Limiter les modifications lies aux changements de matriel, de
systme dexploitation ou des logiciels utiliss.

Indpendance logique: une modification de lorganisation logique
des fichiers (e.g. une nouvelle rubrique) nentrane pas de modification
dans les programmes dapplication non concerns.
la vision de chaque utilisateur est indpendante des visions des
autres utilisateurs et nest pas modifie par les modifications du
schma conceptuel qui ne le concernent pas.
Riadh HADJ MTIR 2011/2012 16
Introduction
Modles de SGBD
SGBD Hirarchique:
Les donnes sont reprsentes dans la base sous forme de structure arborescente.
Manipulation des donnes (balayage ascendant/descendant).
E. g. IMS-IBM
SGBD rseau:
Les donnes sont reprsentes dans la base sous forme d un graphe quelconque.
Les programmes:
ne sont pas indpendants de la structure logique de la base
doivent indiquer le chemin daccs aux donnes
utilisent un langage complexe pour travailler avec leurs donnes.
SGBD relationnel:
fond sur la thorie mathmatique des relations;
reprsentation trs simple des donnes (tables);
langage non procdural (dclaratif), puissant et simple demploi
SQL est un standard parmi ces langages
dominent le march:
Exemples : Oracle, DB2, SQLServer, Access, DBase, Paradox, etc.
SGBD Objet:
enregistre les donnes sous forme dobjets
E. g. O2
Riadh HADJ MTIR 2011/2012 17



LE SGBD ORACLE
Riadh HADJ MTIR 2011/2012 18


Chapitre 1
DBA
(Data Base Administration)
Riadh HADJ MTIR 2011/2012 19
Objectifs du chapitre
la fin de ce chapitre, vous pourrez:
Comprendre la structuration du SGBD Oracle
Dcrire l'architecture d'Oracle Database
Riadh HADJ MTIR 2011/2012 20
Architecture dune BD Oracle (1)
Structures de stockage
Structures mmoire
Processus
Instance
Mmoire SGA
(System Global Area)
Processus en arrire-plan
Fichiers de base de donnes
Riadh HADJ MTIR 2011/2012 21
Architecture dune BD Oracle (2)
Chaque BD qui sexcute est associ
une instance oracle

Une instance oracle est la combinaison
dune SGA et de processus oracle en
arrire plan
Riadh HADJ MTIR 2011/2012 22
Structures mmoire Oracle (1)
Les structures mmoire de base associes
une instance Oracle sont :
Mmoire SGA (System Global Area) : partage
par tous les processus serveur et processus en
arrire-plan
est une zone de mmoire contenant les donnes
et les informations de contrle de l'instance
Mmoire PGA (Program Global Area) : propre
chaque serveur et processus en arrire-plan
il existe une mmoire PGA pour chaque
processus

Riadh HADJ MTIR 2011/2012 23
Structures mmoire Oracle (2)
Zone de mmoire
Java
Cache de tampons
de la base
de donnes
Tampon
de
journalisation
Zone de mmoire
partage
Zone de mmoire
LARGE POOL
SGA
Zone de mmoire
Streams
Processus
serveur
1
PGA
Processus
serveur
2
PGA
Processus en
arrire-plan
PGA
La mmoire SGA contient les structures de donnes
suivantes :
Cache de tampons (buffer cache) de la base de donnes :
met en mmoire cache les blocs de donnes extraits de la base
Tampon de journalisation (redo log buffer) : met en mmoire
cache les informations de journalisation (utilises pour la
rcupration de l'instance) jusqu' ce qu'elles puissent tre
crites dans les fichiers de journalisation physiques stocks sur
le disque
Zone de mmoire partage (Shared Pool) : met en mmoire
cache diverses structures pouvant tre partages par les
utilisateurs,
utilise pendant la phase danalyse des ordres SQL passs un
processus Oracle, elle contient principalement le cache du
dictionnaire de donnes (Dictionnary Cache) et le cache de
bibliothques (Library Cache)
Riadh HADJ MTIR 2011/2012 24
La mmoire SGA (1)

Zone de mmoire LARGE POOL : zone facultative
fournissant d'importantes allocations mmoire pour
certains processus utilisant beaucoup de mmoire, tels
que
les oprations de sauvegarde et de rcupration Oracle et
les processus serveur d'entre-sortie
Zone de mmoire Java : zone utilise pour l'ensemble du
code Java et des donnes propres la session dans la
JVM (Java Virtual Machine)
Zone de mmoire Streams : zone utilise par Oracle
Streams (pour la rplication)
Riadh HADJ MTIR 2011/2012 25
La mmoire SGA (2)
Riadh HADJ MTIR 2011/2012 26
Riadh HADJ MTIR 2011/2012 27
Processus Oracle (1)
System
Monitor
(SMON)
Database
Writer
(DBWn)
Point
de reprise
(CKPT)
LogWriter
(LGWR)
Process
Monitor
(PMON)
Processus
d'archivage
(ARCn)
Processus
serveur
Processus
serveur
Processus
serveur
Processus
serveur
Mmoire SGA
(System Global Area)
Processus en arrire-plan
System Monitor (SMON) : effectue une rcupration aprs panne
lorsque l'instance est dmarre aprs une dfaillance.
Process Monitor (PMON) : effectue un nettoyage de processus
lorsqu'un processus utilisateur choue.
Database Writer (DBWn) : crit les blocs modifis du cache de
tampons de la base dans des fichiers de donnes stocks sur
disque.
Point de reprise (CKPT) : met jour l'ensemble des fichiers de
donnes et de contrle de la base afin d'indiquer le point de reprise le
plus rcent.
LogWriter (LGWR) : crit les entres de journalisation sur le disque.
Processus d'archivage (ARCn) : copie les fichiers de journalisation
(fichiers redo log) dans le lieu destin au stockage des archives
lorsqu'un changement de fichier de journalisation se produit.
Riadh HADJ MTIR 2011/2012 28
Processus Oracle (2)
Riadh HADJ MTIR 2011/2012 29
Gestion dune instance Oracle (1)
SGA
Database
Writer
(DBWn)
LogWriter
(LGWR)
Cache de tampons
de la base
de donnes
Tampon de
journalisation
1
Processus
utilisateur
2
Exemple :
Dmarrer une instance
de base de donnes
Etablir une connexion
System
Monitor
(SMON)
Process
Monitor
(PMON)
Fichiers de donnes
Fichiers de journalisation
Instance
Processus
serveur
3
Lexemple illustre une configuration Oracle dans laquelle
l'utilisateur et les processus serveur associs utilisent des
ordinateurs distincts (connects entre eux via un rseau)
Une instance a t dmarre sur l'ordinateur excutant
Oracle (souvent appel hte ou serveur de base de
donnes).
L'ordinateur excutant l'application (ordinateur local ou poste
client) utilise un processus utilisateur. L'application client
tente d'tablir une connexion avec l'instance en utilisant le
pilote Oracle Net Services.
L'instance dtecte la demande de connexion manant de
l'application et se connecte un processus serveur pour le
compte du processus utilisateur.
Riadh HADJ MTIR 2011/2012 30
Gestion dune instance Oracle (1bis)
1
2
3
Riadh HADJ MTIR 2011/2012 31
Gestion dune instance Oracle (2)
L'utilisateur met
jour une ligne.
Fichiers de
journalisation
Instance
SGA
Database
Writer
(DBWn)
Cache de
tampons de la
base de donnes
Tampon
de
journalisation
Processus
utilisateur
4
10
7
6
5
8

Processus
d'archivage
(ARCn)
9
Point
de reprise
(CKPT)
Fichiers de
donnes
Fichiers de
journalisation
archivs

Fichier de
contrle
LogWriter
(LGWR)
Processus
serveur
Exemple :
Traiter une
instruction SQL
traiter une instruction SQL
L'utilisateur met jour une ligne
Le processus serveur reoit l'instruction et vrifie si elle se
trouve dj dans la zone de mmoire partage de la mmoire
SGA
Si une zone SQL partage est dtecte, le processus serveur vrifie
les privilges d'accs de l'utilisateur par rapport aux donnes
demandes et la zone SQL partage existante est utilise pour le
traitement de l'instruction.
Si l'instruction ne se trouve pas dans la zone de mmoire partage,
une nouvelle zone SQL partage est alloue pour celle-ci afin qu'elle
puisse tre analyse et traite.
Le processus serveur extrait les valeurs des donnes
ncessaires du fichier de donnes (table) ou des blocs de
donnes stocks dans la mmoire SGA
Riadh HADJ MTIR 2011/2012 32
Gestion dune instance Oracle (2bis)
4
6
5

Le processus serveur modifie les donnes de la table dans
la mmoire SGA.
Lorsque la transaction est valide (commit), le processus
LGWR enregistre immdiatement la transaction dans le
fichier de journalisation (fichier redo log).
Le processus DBWn crit les blocs modifis sur le disque
lorsque cela s'avre utile.
Le processus serveur envoie un message de succs ou
d'erreur l'application via le rseau.
Riadh HADJ MTIR 2011/2012 33
Gestion dune instance Oracle (2bis)
10
7
8
9
Riadh HADJ MTIR 2011/2012 34
Structure physique dune BD (1)
Fichiers de
journalisation
en ligne
Fichier de
mots de
passe
Fichier de
paramtres
Fichiers de
journalisation
archivs
Fichiers de
contrle
Fichiers de
donnes
Fichiers d'alertes
et fichiers trace
Fichiers de
sauvegarde
Les fichiers constituant une base de donnes Oracle
sont organiss de la faon suivante :
Fichiers de contrle : contiennent des donnes sur la base
elle-mme (informations sur la structure physique de la base de
donnes). Ces fichiers sont d'une importance capitale pour la
base. Sans eux, vous ne pouvez pas ouvrir de fichiers de
donnes pour accder aux donnes de la base.
Fichiers de donnes : contiennent les donnes utilisateur ou
les donnes d'application de la base.
Fichiers de journalisation en ligne : permettent la rcupration
d'une instance de base de donnes. S'il se produit une panne de
la base sans perte des fichiers de donnes, l'instance peut
rcuprer la base grce aux informations contenues dans ces
fichiers.

Riadh HADJ MTIR 2011/2012 35
Structure physique dune BD (2)
Les fichiers supplmentaires ci-dessous permettent la
base de donnes de s'excuter correctement :
Fichier de paramtres : permet de dfinir comment l'instance
est configure lors de son lancement.
Fichier de mots de passe : permet aux utilisateurs de se
connecter distance la base de donnes et d'effectuer des
tches d'administration.
Fichiers de sauvegarde : ces fichiers sont utiliss pour la
rcupration de la base de donnes. Les fichiers de sauvegarde
sont gnralement restaurs lorsqu'une dfaillance physique ou
une erreur utilisateur a endommag ou supprim les fichiers
d'origine.
Riadh HADJ MTIR 2011/2012 36
Structure physique dune BD (3)

Fichiers de journalisation archivs : contiennent l'historique complet
des modifications de donnes (informations de journalisation) gnres
par l'instance.
Vous pouvez, l'aide de ces fichiers et d'une sauvegarde de la base, restaurer un fichier
de donnes perdu.
Les fichiers de journalisation archivs permettent de rcuprer des fichiers de donnes
restaurs.
Fichiers trace : chaque processus serveur et chaque processus en
arrire-plan peut crire dans un fichier trace associ.
Lorsqu'une erreur interne est dtecte par un processus, ce dernier procde un dump
des informations sur l'erreur vers son fichier trace.
Certaines informations crites dans un fichier trace sont destines l'administrateur de
base de donnes, tandis que d'autres s'adressent aux services de support technique
Oracle. .
Fichiers dalertes : sont des fichiers trace spcifiques. Le fichier d'alertes
d'une base de donnes est un journal chronologique des messages et des
erreurs. Oracle recommande de consulter ces fichiers.
Riadh HADJ MTIR 2011/2012 37
Structure physique dune BD (4)
Une base de donnes Oracle est un
ensemble de donnes trait comme un
tout.
L'objectif gnral d'une base de donnes
est de stocker et d'extraire des
informations associes.
Une base de donnes comprend des
structures logiques et des structures
physiques
Riadh HADJ MTIR 2011/2012 38
Structures logiques et physiques dune BD (1)
Riadh HADJ MTIR 2011/2012 39
Structures logiques et physiques dune BD (2)
Base de donnes
Structures logiques Structures physiques
Tablespace
Fichier de
donnes
Bloc du systme
d'exploitation
Segment
Extent
Bloc de donnes
Oracle
Schma
Une base de donnes est divise en units de
stockage logiques appeles tablespaces, qui
regroupent des structures logiques associes.
Par exemple, les tablespaces regroupent
habituellement tous les objets d'une application
pour simplifier certaines oprations
d'administration.
Vous pouvez disposer d'un premier tablespace
pour les donnes d'application et d'un second
pour les index d'application.
Riadh HADJ MTIR 2011/2012 40
Tablespaces
Un schma est un ensemble d'objets de base de
donnes appartenant un utilisateur de la base.
Les objets de schma sont les structures logiques
qui font directement rfrence aux donnes de la
base.
Par exemple, ces structures peuvent tre des
tables, des vues, des squences, des procdures
stockes, des synonymes, des index, des clusters et
des liens de base de donnes.
En gnral, les objets de schma incluent tout ce
que l'application cre dans la base de donnes.
Riadh HADJ MTIR 2011/2012 41
Schmas
Au niveau de dtail le plus fin, les donnes d'une
base Oracle sont stockes dans des blocs de
donnes.
Un bloc de donnes correspond un nombre
d'octets spcifique d'espace physique sur le
disque.
La taille du bloc de donnes est indique pour
chaque tablespace lors de la cration de celui-ci.
Chaque base utilise et alloue de l'espace libre de
base de donnes dans les blocs de donnes
Oracle.
Riadh HADJ MTIR 2011/2012 42
Blocs de Donnes
Extents (ensembles de blocs contigus)
Le niveau logique d'une base de donnes
s'appelle un extent.
Un extent est un nombre dfini de blocs de
donnes contigus (obtenus par une allocation
unique) permettant de stocker un type
spcifique d'informations.
Riadh HADJ MTIR 2011/2012 43
Extents
Le niveau logique de stockage situ au-dessus
d'un extent s'appelle un segment.

Un segment est un ensemble d'extents allous
pour une certaine structure logique.

Seuls les objets 'physiques' peuvent tre des
segments. Ainsi une vue ou un synonyme
n'est pas un segment...
Riadh HADJ MTIR 2011/2012 44
Segments
Les diffrents types de segment :
Segments de donnes : Chaque table comporte un segment de
donnes. Toutes les donnes de la table sont stockes dans les extents
de son segment de donnes.
Segments d'index : Chaque index comporte un segment d'index qui
stocke l'ensemble de ses donnes.
Segments d'annulation (rollback segment) : qui stocke l'image avant
modification des donnes.
Un tablespace UNDO est cr par l'administrateur de base de donnes afin de stocker
temporairement les informations d'annulation.
Les informations contenues dans un segment d'annulation permettent de gnrer des
informations de base de donnes cohrentes en lecture et, lors de la rcupration de la
base, d'annuler les transactions non valides pour les utilisateurs.
Segments temporaires : La base de donnes Oracle cre des
segments temporaires lorsqu'une instruction SQL requiert une zone de
travail temporaire pour son excution (tri par exemple).
Lorsque l'excution de l'instruction est termine, les extents du segment temporaire
sont rendus l'instance en vue d'une utilisation ultrieure.
On peut indiquer un tablespace temporaire par dfaut pour chaque utilisateur ou
l'chelle de la base de donnes.
Riadh HADJ MTIR 2011/2012 45
Segments (2)
Structures mmoire
Mmoire SGA (System Global Area) : cache de tampons (buffer
cache) de la base de donnes, tampon de journalisation (redo
buffer) et diffrents pools
Mmoire PGA (Program Global Area)
Processus
Processus utilisateur et processus serveur
Processus en arrire-plan : SMON, PMON, DBWn, CKPT,
LGWR, ARCn, etc.
Structures de stockage
Structures logiques : base de donnes, schmas, tablespaces,
segments, extents et blocs Oracle
Structures physiques : fichiers de donnes, fichiers de
paramtres, fichiers de journalisation et blocs du systme
d'exploitation
Riadh HADJ MTIR 2011/2012 46
BD Oracle : Rcapitulatif des composants structurels
Riadh HADJ MTIR 2011/2012 47
Gestion dune instance
Une instance Oracle
=
Ensemble des zones mmoires
+
Processus allous une base de donnes
Une instance de base de donnes Oracle
peut tre dans 4 statuts :
Arrte
Etat NoMount
Etat Mount (monte)
Ouverte

Riadh HADJ MTIR 2011/2012 48
Gestion dune instance (2)
Riadh HADJ MTIR 2011/2012 49
Gestion dune instance (3)
Dmarrage dune base de donnes Oracle
sqlplus / as sysdba
SQL> startup
Il est possible de dmarrer les bases de donnes avec
les commandes suivantes:
SQL> startup {nomount | mount}
SQL> alter database mount;
SQL> alter database open;
Riadh HADJ MTIR 2011/2012 50
Gestion dune instance (4)
Arrt dune base de donnes Oracle :
4 types darrt
Normal
Transactionnel
Immediate
Abort
sqlplus / as sysdba
SQL> shutdown (transactionnal/immediate/Abort)
Modes darrt
Riadh HADJ MTIR 2011/2012 51
Gestion dune instance (5)
Riadh HADJ MTIR 2011/2012 52


Chapitre 2

Gestion des utilisateurs dans une
BD Oracle
Les privilges systme
Les privilges objet
Les privilges sont des droits pour excuter
des requtes
Le plus haut niveau de privilges sont des
privilges DBA, il a la possibilit de donner
aux utilisateurs laccs la base de
donnes
Les utilisateurs doivent possder des
privilges systme pour se connecter la
base de donnes, et les privilges objets
pour manipuler des donnes
Riadh HADJ MTIR 2011/2012 53
Quest ce quun privilge?
Riadh HADJ MTIR 2011/2012 54
Les privilges Systme
Riadh HADJ MTIR 2011/2012 55
Les privilges DBA
Un DBA peut crer des utilisateurs en
utilisant la requte CREATE USER
Lorsquun utilisateur est cr, il ne
possde aucun privilge. Le DBA doit lui
donner des privilges souhaits
Riadh HADJ MTIR 2011/2012 56
Crer un utilisateur
Lorsque le DBA a cr un utilisateur, il lui
donne des privilges
Exemple : Le DBA donne lutilisateur la
possibilit de se connecter la base de
donnes. Ce privilge est donn grce
CREATE SESSION
Riadh HADJ MTIR 2011/2012 57
Privilges systme accords un utilisateur
Riadh HADJ MTIR 2011/2012 58
Privilges systme accords un utilisateur (2)
Pour accorder un privilge il faut suivre les
tapes suivantes :
1) Crer un nouvel utilisateur

2) Donner le privilge CREATE SESSION
lutilisateur

3) Donner au nouvel utilisateur le privilge
CREATE TABLE
Riadh HADJ MTIR 2011/2012 59
Accorder un privilge
Riadh HADJ MTIR 2011/2012 60
Accorder un privilge (2)
Un rle est un ensemble de privilges
Lorsque le rle est cr, le DBA utilise la
requte GRANT pour assigner ce rle aux
utilisateurs
Riadh HADJ MTIR 2011/2012 61
Crer et accorder un privilge un rle
Riadh HADJ MTIR 2011/2012 62
Modification du mot de passe
Riadh HADJ MTIR 2011/2012 63
Les privilges Objet
Riadh HADJ MTIR 2011/2012 64
Les privilges Objet
Riadh HADJ MTIR 2011/2012 65
Accorder les privilges Objet
Le privilge accord avec la clause WITH GRANT OPTION
donne la possibilit au nouvel utilisateur daccorder les
privilges sur cet objet aux autres utilisateurs
Si vous enlevez ensuite le privilge cet utilisateur, tous les
utilisateurs qui il aura donn ce privilge se le verront enlev
aussi de manire automatique
Riadh HADJ MTIR 2011/2012 66
Les mots cls WITH GRANT OPTION et PUBLIC
Riadh HADJ MTIR 2011/2012 67
Retirer les privilges
Riadh HADJ MTIR 2011/2012 68


Chapitre 3

Le Langage SQL
Riadh HADJ MTIR 2011/2012 69
Partie I : Les ordre de SQL
SQL (Structured Query Language) ou langage
de requtes structur est un langage destin
interroger et manipuler les SGBDR
Il a t introduit par IBM en 1979
Le langage SQL est devenu Standard ANSI en
86 et ISO en 87
Plusieurs rvisions: SQL1 en 1989, SQL2 en
1992 en , SQL3 en 1999 et SQL2003
Riadh HADJ MTIR 2011/2012 70
Prsentation
Le langage SQL comporte:
LDD : Langage de Dfinition de Donnes (dfinir
les tables, les vues, ..)
LMD : Langage de Manipulation de Donnes
(MAJ, Requtes, ..)
Riadh HADJ MTIR 2011/2012 71
Prsentation (suite)
Riadh HADJ MTIR 2011/2012 72
Les ordres de SQL
Riadh HADJ MTIR 2011/2012 73
Les types de donnes SQL
Types de donnes Description
NUMBER Chiffre
CHAR Chane de caractres
VARCHAR2 Chane de caractres de longueur
variable
DATE La valeur de date et dheure entre 1
er

Janvier 4712 avant JC et 31 Dcembre
9999
CREATE TABLE nom_de_table(
attribut_1 type_1 [PRIMARY KEY],

attribut_n type_n
//contrainte cl primaire
[CONSTRAINT nom_const PRIMARY KEY(liste_attributs)],
//contrainte cl trangre
[CONSTRAINT nom_const FOREIGN KEY(liste_attributs)
REFERENCES nom_table(liste_attributs)],
//contrainte dintgrit
[CONSTRAINT nom_const CHECK(condition)]

);
Riadh HADJ MTIR 2011/2012 74
Cration dune table
Colloque (nomC, universiteC, adresseC, dateC)
Participant(numeroP, nomP, prenomP, adresseP)
Organisateur (numeroP#, telephone, nomC#)
Conferencier (numeroP#, institition)
Expose (titre, resume)
Inscrit (numeroP#, nomC#, droitinscription)
Programme(nomC#, numeroP#, titre#)

Riadh HADJ MTIR 2011/2012 75
Exemple de Bases de donnes
CREATE TABLE participant(
numeroP number(5),
nomP char(30),
prenomP char(30),
addressP char(50)
);

Riadh HADJ MTIR 2011/2012 76
Cration dune table : exemple
CREATE TABLE participant(
numeroP number(5) PRIMARY KEY,
nomP char(30) NOT NULL,
prenomP char(30),
addressP char(50)
);

Riadh HADJ MTIR 2011/2012 77
Les contraintes : exemple
CREATE TABLE inscrit(
numeroP number(5),
nomC char(30),
droitinscription number(5),
constraint pri_key Primary Key (numeroP,
nomC),
constraint for_key1 Foreign Key (numeroP)
references participant(numeroP),
constraint for_key2 Foreign Key (nomC)
references colloque(nomC)
);
Riadh HADJ MTIR 2011/2012 78
Les contraintes : exemple (suite)

ALTER TABLE nom_table
ADD|MODIFY(attribut TYPE,);


Exemple:
ALTER TABLE participant MODIFY(numeroP number(3));
Riadh HADJ MTIR 2011/2012 79
Modification de tables

ALTER TABLE nom_table
DROP CONSTRAINT nom_const;


Riadh HADJ MTIR 2011/2012 80
Suppression de contraintes
SELECT liste_d_attributs
FROM liste_de_tables
WHERE conditions;

SELECT indique la liste des attributs constituant le rsultat

FROM le (les) tables utiles la requte

WHERE indique les conditions que doivent satisfaire les
tuples de la base pour faire partie du rsultat

Riadh HADJ MTIR 2011/2012 81
La requte SELECT
Exemple 1 :

Select * from participant;

* remplace tous les tuples
Cette requte retourne tous les tuples de la table participant
Riadh HADJ MTIR 2011/2012 82
La requte SELECT (2)
Exemple 2 :

Select numeroP, nomP
from participant
where prenomP = 'Salah';

Cette requte retourne le numro et le nom de tous les
participants ayant pour prnom 'Salah'
Riadh HADJ MTIR 2011/2012 83
La requte SELECT (3)
Contrairement l'algbre relationnelle, SQL ne
supprime pas les doublons

Exemple :




Riadh HADJ MTIR 2011/2012 84
Les doublons
Select prenomP from participant
prenomP
Ali
Salah
Salma
Ins
Ali
Mohamed
Salah
Anis
Ali
Pour viter d'avoir des tuples identiques en
utilise le mot cl DISTINCT

Exemple :

Select DISTINCT(prenomP)
from participant;

Riadh HADJ MTIR 2011/2012 85
PrenomP
Salah
Salma
Ins
Mohamed
Anis
Ali
Les doublons (suite)
Il est possible de trier les donnes l'aide de la
clause ORDER BY suivie de la liste des
attributs servant comme critre de tri

Exemple :
Select *
from participant
ORDER BY nomP, prenomP


Riadh HADJ MTIR 2011/2012 86
Trier les rsultats
Dans la clause WHERE on spcifie une
condition portant sur les attributs des relations
mentionnes par la clause FROM
Les oprateurs utiliss:
AND, OR et NOT
Les oprateurs de comparaison (<,>,<=,>=, <>)
BETWEEN pour les intervalles
IN pour un ensemble de valeurs

Riadh HADJ MTIR 2011/2012 87
La clause WHERE
Exemples:

select NomP
from Inscrit
where droitinscription BETWEEN 100 and 1000;


select NomP
from Participant
Where prenomP IN ('Ali','Amine','Hend');
Riadh HADJ MTIR 2011/2012 88
La clause WHERE (suite)
SQL ne distingue pas entre les minuscules et
majuscules pour les mots cls. Ceci n'est pas
vrai pour les valeurs, 'Tunisie' est
diffrente de 'TUNISIE'
SQL fournit des options pour les recherches
par motif (pattern) l'aide de la clause LIKE
'%' dsigne n'importe qu'elle chane de caractres
'_' dsigne une lettre
Riadh HADJ MTIR 2011/2012 89
Les chanes de caractres
Exemples :

Select *
from colloque
where nomC LIKE '%a';
Tous les colloques dont le nom finit par 'a'

Select *
from colloque
where nomC LIKE '__a%';
Tous les colloques dont la quatrime lettre est 'a'

Riadh HADJ MTIR 2011/2012 90
Les chanes de caractres (2)
Dans SQL une date s'crit au format
DD-MON-YY'

Exemple :
Select nomC
from colloque
where dateC BETWEEN 03-NOV-05 AND
03-NOV-06

Riadh HADJ MTIR 2011/2012 91
Les dates
Les valeurs de certains attributs sont inconnus.
Ils sont mis NULL
Toute comparaison avec NULL donne un
rsultat qui n'est ni vrai ni faux mais une
troisime valeur UNKNOWN
NULL est un mot cl et non pas une constante

TRUE 1
UNKNOWN
FALSE 0

Riadh HADJ MTIR 2011/2012 92
Les valeurs nulles
Les connecteurs logiques deviennent
x AND y = min(x,y)
x OR y = max (x,y)
NOT x = 1 - x
Riadh HADJ MTIR 2011/2012 93
Les oprations binaires
Les requtes SQL dcrites dans cette section
permettent de manipuler simultanment
plusieurs tables et d'exprimer des oprateurs
d'algbre relationnelle:
jointure,
union,
intersection,
...
Riadh HADJ MTIR 2011/2012 94
Les requtes sur plusieurs tables
Une jointure permet d'exprimer des requtes
portant sur des donnes rparties sur plusieurs
tables
Exemple: Donner le nom et prnom de tous les
participants d'un colloque
Select NomP, PrenomP
from Inscrit, Participant
where Inscrit.NumeroP =
Participant. NumeroP and
NomC='Colloque1';
Riadh HADJ MTIR 2011/2012 95
Jointures
Dans l'ambigut (deux attributs ayant le mme
nom), on met le nom du table comme prfixe
Comme ce n'est pas pratique de recopier
intgralement le nom d'une table, on peut
dfinir et utiliser des synonymes
Exemple:
Select NomP, PrenomP
from Inscrit as I, Participant as P
where I.NumeroP = P.NumeroP and
NomC='Colloque1';


Riadh HADJ MTIR 2011/2012 96
Jointures (2)
On peut faire intervenir plus que deux tables
Exemple:

Select NomP, PrenomP, DateC
from Inscrit I, Participant P, colloque C
where I.NumeroP = P.NumeroP and
I.NomC = C.NomC;

Riadh HADJ MTIR 2011/2012 97
Jointures (3)
Exemple:
Donner des couples de colloques organiss par
la mme universit

Select C1.NomC, C2.NomC
from colloque C1, colloque C2
Where C1.Universite = C2.Universite


Riadh HADJ MTIR 2011/2012 98
Jointure sur la mme table
Le rsultat dune requte sert comme condition
dans la deuxime requte
Ces types de requtes peuvent porter sur
plusieurs tables

Riadh HADJ MTIR 2011/2012 99
Requtes imbriques
Conditions portant sur des relations
Exemple:
Select numeroP
from inscrit
where nomC In ( select nomC
from Colloque
where Universite = Monastir);

On peut utiliser = la place de IN si on est sr que la
sous requte ramne un et un seul tuple
Riadh HADJ MTIR 2011/2012 100
Requtes imbriques (2)
Sous requtes corrles
Exemple:
Donner tous les participants ayant organis au moins
une fois et fait une prsentation dans un colloque

Select numeroP
from organisateur O
where Exists (select *
from conferencier C
where O.numeroP = C.numeroP);

Riadh HADJ MTIR 2011/2012 101
Requtes imbriques (3)
Les fonctions d'agrgation permettent de faire des oprations
sur une slection de champ
Elles effectuent un calcul sur un ensemble de valeurs et
retournent une valeur unique
l'exception de COUNT, les fonctions d'agrgation ignorent
les valeurs NULL
COUNT : nombre de lignes, ou de valeurs non nulles
MAX : calcule la valeur maximale d'une colonne
MIN : calcule la valeur minimale d'une colonne
AVG : calcule la moyenne dune colonne
SUM : calcule la somme sur une colonne
Les fonctions d'agrgation sont souvent utilises avec la clause
GROUP BY de l'instruction SELECT




Riadh HADJ MTIR 2011/2012 102
Agrgation
Select count (NomC)
From colloque;

Select sum (droitinscription)
From inscrit
Where NumeroP = 100;

Select count(numStation), AVG (tarif), MAX
(tarif), MIN (tarif)
From Station;


Riadh HADJ MTIR 2011/2012 103
Agrgation : exemples
Construit des groupes en associant les tuples
partageant la mme valeur pour une ou
plusieurs colonnes

Exemple:
Select universite, count (NomC)
from colloque
Group by universite;
Riadh HADJ MTIR 2011/2012 104
La clause GROUP BY
On peut ajouter une condition sur le groupe

Exemple:
Select universite, count (NomC)
From colloque
Group by universite
Having count (NomC) >= 3;

Riadh HADJ MTIR 2011/2012 105
La clause HAVING
Insert into R(a1,a2, .., aN )
values (v1,v2, .., vN );

Exemple :

Insert into Colloque (nomC, universiteC,
adresseC, dateC)
values (JJC,Manouba, Campus Manouba,
2007-03-30);

Insert into Inscrit (numeroP, nomC,
droitinscription)
values (153,JJC, 300);
Riadh HADJ MTIR 2011/2012 106
Mise jour dune table : Insertion
Delete from R
Where condition;

Exemple :

Delete from Participant where NumeroP = 1210;
Delete from colloque where NomC = JAE;


Il faut respecter les contraintes dintgrit rfrentielle !!


Riadh HADJ MTIR 2011/2012 107
Mise jour dune table : Destruction
Update R set a1=v1, a2=v2, aN=vN;

Exemple :

Update inscrit set droitinscription =
droitinscription/6.52;

Update colloque set universite = monastir;

Riadh HADJ MTIR 2011/2012 108
Mise jour dune table : Modification
Une vue est une sorte de fentre par
laquelle des donnes peuvent tre
slectionnes et changes
Une vue restreint laccs aux donnes
Une vue peut tre utilise pour construire
des requtes

CREATE VIEW nom_vue AS requte;

Riadh HADJ MTIR 2011/2012 109
Les vues
Riadh HADJ MTIR 2011/2012 110
Partie II : SQL avanc

Les requtes simples
Les sous-requtes
Les fonctions de groupes
Le regroupement
Les fonctions individuelles
La conversion des donnes
Les fonctions gnrales
Les expressions conditionnelles
Les oprateurs de comparaison
Les vues
Les squences
Les index
Les synonymes
Riadh HADJ MTIR 2011/2012 111
Les requtes simples
SELECT <liste des attributs projets>

FROM <liste des relations touches par la question>

[WHERE <liste des critres de restriction>]

[GROUP BY <liste des attributs d'agrgation>]

[HAVING <liste des critres de restriction dagrgats>]

[ORDER BY <liste des attributs de tri du rsultat>];

Riadh HADJ MTIR 2011/2012 112
Syntaxe gnrale dune recherche
Exemple:
SELECT customer_name, city
FROM T_Customer;

Riadh HADJ MTIR 2011/2012 113
Ordre et choix des colonnes (SELECT)
customer_name city
------------------------- ---------------
Contemporary Casuals Gainsville
Value Furniture Plano
Home Furnishings Albany
Eastern Furniture Carteret
Impressions Sacramento
Furniture Gallery Boulder
Period Furnishings Seattle
California Classics Santa Clara
M & H Casual Furniture Clearwater
Seminole Interiors Seminole
American Euro Lifestyles Prospect Park
Battle Creek Furniture Battle Creek
Heritage Furnishings Carlisle
Kaneohe Homes Kaneohe
Mountain Scenes Ogden
Riadh HADJ MTIR 2011/2012 114
Ordre des lignes (ORDER BY)
Exemples:

SELECT customer_name, city
FROM T_Customer
ORDER BY customer_name;
SELECT customer_name, city
FROM T_Customer
ORDER BY city;
customer_name city
------------------------- --------------
American Euro Lifestyles Prospect Park
Battle Creek Furniture Battle Creek
California Classics Santa Clara
Contemporary Casuals Gainsville
Eastern Furniture Carteret
Furniture Gallery Boulder
Heritage Furnishings Carlisle
Home Furnishings Albany
Impressions Sacramento
Kaneohe Homes Kaneohe
M & H Casual Furniture Clearwater
Mountain Scenes Ogden
Period Furnishings Seattle
Seminole Interiors Seminole
Value Furniture Plano
customer_name city
-------------------------- ----------------
Home Furnishings Albany
Battle Creek Furniture Battle Creek
Furniture Gallery Boulder
Heritage Furnishings Carlisle
Eastern Furniture Carteret
M & H Casual Furniture Clearwater
Contemporary Casuals Gainsville
Kaneohe Homes Kaneohe
Mountain Scenes Ogden
Value Furniture Plano
American Euro Lifestyles Prospect Park
Impressions Sacramento
California Classics Santa Clara
Period Furnishings Seattle
Seminole Interiors Seminole
Oprations
addition (+), soustraction (-)
multiplication (*), division (/)
modulo (%)
Ordre d'valuation
1 - parenthses
2 - multiplication et division de gauche droite
3 - addition et soustraction de gauche droite

Riadh HADJ MTIR 2011/2012 115
Expressions numriques
Riadh HADJ MTIR 2011/2012 116
Expressions numriques : Multiplication
Exemple:
SELECT Material_ID, unit_price, unit_price*1.12
FROM T_Raws_Materials;


Material_ID Unit_price Unit_price*1.12
--------------- --------------- ---------------
1 7,89 8,8368
2 12,05 13,496
3 13,67 15,3104
4 7,66 8,5792
5 7,23 8,0976
6 15,19 17,0128
7 13,02 14,5824
8 15,45 17,304
9 10,88 12,1856
10 15,55 17,416
11 8,79 9,8448
12 14,26 15,9712
13 15,82 17,7184
14 13,75 15,4
15 16,72 18,7264
16 5,70 6,384
17 7,95 8,904
18 11,13 12,4656

Riadh HADJ MTIR 2011/2012 117
Expression textuelle : Concatnation
Exemple:
SELECT customer_name, city || ', ' || state
FROM T_Customer
ORDER BY city;


customer_name
-------------------------- -------------------
Home Furnishings Albany, NY
Battle Creek Furniture Battle Creek, MI
Furniture Gallery Boulder, CO
Heritage Furnishings Carlisle, PA
Eastern Furniture Carteret, NJ
M & H Casual Furniture Clearwater, FL
Contemporary Casuals Gainsville, FL
Kaneohe Homes Kaneohe, HI
Mountain Scenes Ogden, UT
Value Furniture Plano, TX
American Euro Lifestyles Prospect Park, NJ
Impressions Sacramento, CA
California Classics Santa Clara, CA
Period Furnishings Seattle, WA
Seminole Interiors Seminole, FL
Riadh HADJ MTIR 2011/2012 118
Les sous-requtes
SQL permet d'utiliser des requtes pour laborer
des conditions plus complexes et "dynamiques"

un critre de recherche employ dans la clause
WHERE soit lui mme le rsultat d'un SELECT

Types de sous-requtes
Sous-requtes simples
Sous-requtes synchronises


Riadh HADJ MTIR 2011/2012 119
Les sous-requtes
Dans ce cas la sous-requte est d'abord value
puis le rsultat est utilis pour excuter la requte
principale
Exemple
slectionner la liste des employs ayant mme poste que
JONES
select FIRST_NAME from EMPLOYEES
where JOB_ID = ( select JOB_ID from EMPLOYEES
where upper(FIRST_NAME) = 'JONES' );
Remarque
Les sous-requtes sont plus lisibles que des jointures
Riadh HADJ MTIR 2011/2012 120
Les sous-requtes simples
Dans ce cas la sous-requte est value pour chaque n-
uplet de la requte principale
Exemple
slectionner des employs ne travaillant pas dans le mme
dpartement que leur manager
select FIRST_NAME from EMPLOYEES e
where DEP_ID != ( select DEP_ID from EMPLOYEES
where e.MANAGER_ID = EMPLOYEE_ID);
Remarque
le synonyme e de la requte principale est utilis dans
la sous-requte

Riadh HADJ MTIR 2011/2012 121
Les sous-requtes synchronises
L'oprateur EXISTS permet de construire un
prdicat vrai si la sous-requte qui suit ramne
au moins une ligne
Syntaxe

select --- from nom-table where exists ( select --- )

Exercice
Liste des employs travaillant dans un dpartement
qui contient au moins un ANALYSTE ?

Riadh HADJ MTIR 2011/2012 122
Les oprateurs associs aux sous-requtes (1)
Les oprateurs ensemblistes
Dans les exemples prcdents, le SELECT de la
sous-requte ramenait un seul n-uplet, car droite du
signe "=" se trouvait une seule valeur
Cependant une sous-requte peut ramener plusieurs n-
uplets (une liste de valeur)
Les oprateurs permettant de comparer une valeur un
ensemble de valeurs sont les oprateurs obtenus en
ajoutant ANY et ALL la suite d'un oprateur de
comparaison
ANY : la comparaison sera vraie si elle est vraie pour au
moins un lment de l'ensemble
ALL : la comparaison sera vraie si elle est vraie pour tous les
lments de l'ensemble


Riadh HADJ MTIR 2011/2012 123
Les oprateurs associs aux sous-requtes (2)
Exercice
slectionner les employs gagnant plus que tous les
employs du dpartement 30
Remarque
L'oprateur IN est quivalent l'oprateur = ANY
L'oprateur NOT IN est quivalent l'oprateur != ALL
Exercice
slectionner les employs du dpartement
"RESEARCH" embauchs le mme jour que quelqu'un
du dpartement "SALES"


Riadh HADJ MTIR 2011/2012 124
Les oprateurs associs aux sous-requtes (3)
Les sous-requtes ramenant plusieurs colonnes
II est possible de comparer le rsultat d'un SELECT
ramenant plusieurs colonnes une liste de
colonnes
La liste de colonnes figurera entre parenthses
gauche de l'oprateur de comparaison
Syntaxe
select col1, ... from nom table
where (col2,col3,) = (select col2, col3, ---)

Exercice
slectionner la liste des employs ayant mme job et
mme salaire que FORD

Riadh HADJ MTIR 2011/2012 125
Les oprateurs associs aux sous-requtes (4)
Riadh HADJ MTIR 2011/2012 126
Les fonctions de groupes
II est possible d'utiliser certaines fonctions en demandant
de grouper les rsultats selon une ou plusieurs colonnes
Les fonctions de groupe sont :
avg (col)
moyenne des valeurs (les valeurs NULL sont ignores)
count (col)
nombre de n-uplet satisfaisant la condition WHERE. Les valeurs
NULL sont ignores.
max (col)
valeur maximale des valeurs de la colonne
min (col)
valeur minimale des valeurs de la colonne
sum (col)
somme des valeurs de la colonne
variance (col)
variance des valeurs de la colonne
Riadh HADJ MTIR 2011/2012 127
Les fonctions de groupes (1)
Riadh HADJ MTIR 2011/2012 128
Les fonctions de groupes (2)
SELECT COUNT(*)
FROM T_Product ;
COUNT(product_description)
--------------------------
2
SELECT COUNT(product_description)
FROM T_Product ;
Product_ID Product_Name Product_Description
----------- --------------------- -------------------
1 End Table
2 Coffee Table
3 Computer Desk Computer Desk 48
4 Entertainment Center
5 Writer's Desk
6 8-Drawer Desk
7 Dining Table
8 Computer Desk Computer Desk 64

COUNT(*)
--------
8
SELECT product_id, product_name, product_description
FROM T_Product ;
Riadh HADJ MTIR 2011/2012 129
Les fonctions de groupes (3)
MIN(unit_price) MAX(unit_price)
--------------- ------------
175,00 800,00
SELECT MIN(unit_price), MAX(unit_price)
FROM T_Product ;
MAX(order_date)
--------------
05/11/1998
SELECT MAX(order_date)
FROM T_Order;
Riadh HADJ MTIR 2011/2012 130
Les fonctions de groupes (4)
11 150.00
SELECT SUM(on_hand*unit_price)
FROM T_Product;
SELECT AVG(unit_price)
FROM T_Product;
440.63
Riadh HADJ MTIR 2011/2012 131
Regroupement
II est possible de subdiviser la table en
groupes,
chaque groupe tant l'ensemble des lignes
ayant une valeur commune.
Syntaxe

group by expr [,expr2 ...]

Exemple
donner la somme des salaires pour chaque
dpartement
select SUM(SALARY) from EMPLOYEES
group by DEPARTEMENT_ID;

Riadh HADJ MTIR 2011/2012 132
Calcul sur plusieurs groupes
Riadh HADJ MTIR 2011/2012 133
Regroupement: Ordre des critres
NO_CLIENT NO_VENDEUR SUM(MONTANT)
--------- ---------- ------------
1233 455 493,28
1233 687 132,33
4333 132 32,35
4333 687 137,98
4333 754 122,1
4436 132 100
5026 455 100
5026 687 44,32
SELECT NO_CLIENT, NO_VENDEUR, SUM(MONTANT)
FROM COMMANDE
GROUP BY NO_CLIENT, NO_VENDEUR ;
GROUP BY NO_VENDEUR, NO_CLIENT ;
NO_CLIENT NO_VENDEUR SUM(MONTANT)
--------- ---------- ------------
4333 132 32,35
4436 132 100
1233 455 493,28
5026 455 100
1233 687 132,33
4333 687 137,98
5026 687 44,32
4333 754 122,1
Dans un regroupement la clause SELECT a
deux parties:
liste des attributs servant au regroupement
liste des fonctions ensemblistes values sur
chaque groupe

Riadh HADJ MTIR 2011/2012 134
Regroupement: clause SELECT
SELECT NO_CLIENT, SUM(MONTANT)
FROM COMMANDE
GROUP BY NO_CLIENT;
regroupement
fonctions
Le mot-cl distinct permet de supprimer
les lignes identiques du rsultat

Riadh HADJ MTIR 2011/2012 135
Regroupement: DISTINCT
NO_CLIENT
---------
1233
4333
4436
1233
1233
4333
1233
5026
4333
5026
SELECT NO_CLIENT
FROM COMMANDE ;
NO_CLIENT
---------
1233
4333
4436
5026
SELECT DISTINCT NO_CLIENT
FROM COMMANDE ;
COUNT(DISTINCTNO_CLIENT)
------------------------
4
SELECT COUNT(DISTINCT NO_CLIENT)
FROM COMMANDE ;
COUNT(NO_CLIENT)
----------------
10
SELECT COUNT( NO_CLIENT)
FROM COMMANDE ;
La clause HAVING permet, de faon analogue
la clause WHERE, de poser des conditions sur le
rsultat du regroupement
select col1 [,col2 ...]
from table1 [, table2]
[where prdicat]
[group by expression1 [, expression2]
[having prdicat] ];
Le prdicat figurant dans la clause HAVING ne
peut porter que sur des caractristiques des
fonctions de groupe figurant dans la clause
GROUP BY

Riadh HADJ MTIR 2011/2012 136
Regroupement: clause HAVING
Riadh HADJ MTIR 2011/2012 137
Fonctions individuelles
Riadh HADJ MTIR 2011/2012 138
Fonctions de manipulation de casse
Fonctions Dfinitions Exemples Rsultats
INITCAP (colonne | chane) Convertit la premire
lettre de chaque mot
dune chane de
caractres en
majuscule et les
autres lettres en
minuscule
Initcap(Cours de
SQL')

Cours De
Sql
LOWER (colonne | chane)

Convertit une chane
de caractres en
minuscule
lower(Cours de
SQL')

cours de
sql
UPPER (colonne | chane)

Convertit une chane
de caractres en
majuscule
upper(Cours de
SQL')

COURS
DE SQL
Riadh HADJ MTIR 2011/2012 139
Fonctions Dfinitions Exemples Rsultats
length (chane) Nombre de caractres dans la
chane
length(Bonjour')

7
instr(chane, sous-chane) Emplacement dune sous-chane
spcifie dans une chane
instr(Bonjour', j')

4
substr(chane, i, j) Extrait une sous-chane du i
me
caractre jusquau j
me
caractre
substr(Bonjour', 1,3)

Bon
lpad(chane, x [,text])

Remplit chane pour avoir une
chane de longueur x en ajoutant
le text (un espace par dfaut)
lpad(sal,10, *)

Si chane a une taille
suprieure x alors elle
est tronque
******5000
rpad(chane, x [,text]) rpad(sal,10, *') 5000******
concat(chane1, chane2) Concatner des chanes concat(Bon,jour) Bonjour
Trim([leading|trailing|both ]
[caractre] FROM chane)
Supprime la plus grande chane
contenant seulement
les caractres (un espace par
dfaut) partir du dbut, de la fin
ou des deux extrmits de
la chane
trim(S FROM
SSSMITH)

trim(both 'x' from
'xTomxx')

MITH


Tom
Fonctions de manipulation de caractres
SYSDATE affiche la date systme

Riadh HADJ MTIR 2011/2012 140
Fonctions de manipulation des dates (1)
Riadh HADJ MTIR 2011/2012 141
Fonctions de manipulation des dates (2)
Riadh HADJ MTIR 2011/2012 142
Fonctions de manipulation des dates (3)
Riadh HADJ MTIR 2011/2012 143
Conversion de donnes
Riadh HADJ MTIR 2011/2012 144
Conversion
Riadh HADJ MTIR 2011/2012 145
Conversion
Riadh HADJ MTIR 2011/2012 146
Les fonctions gnrales
Syntaxe : NVL(expr1,expr2)
Fonction : Substituer les valeurs nulles
dune colonne par une valeur choisie
Exemple
Riadh HADJ MTIR 2011/2012 147
La fonction NVL
Syntaxe : NVL2(expr1,expr2,expr3)
Fonction : Afficher expr2 si expr1 est non
nulle, sinon afficher expr3
Exemple

Riadh HADJ MTIR 2011/2012 148
La fonction NVL2
Syntaxe : NULLIF(expr1,expr2)
Fonction : Afficher NULL si expr1=expr2,
sinon afficher expr1
Exemple
Riadh HADJ MTIR 2011/2012 149
La fonction NULLIF
Riadh HADJ MTIR 2011/2012 150
Les expressions conditionnelles
Riadh HADJ MTIR 2011/2012 151
Lexpression CASE
Riadh HADJ MTIR 2011/2012 152
Lexpression DECODE
Riadh HADJ MTIR 2011/2012 153
Les oprateurs de comparaison
=, <, >, <=, >=, <>,
BETWEEN
IS NULL
LIKE

Riadh HADJ MTIR 2011/2012 154
Oprateurs de comparaison
SELECT *
FROM T_Customer
WHERE customer_name = 'IMPRESSIONS';

SELECT *
FROM T_Customer
WHERE customer_id = 2;

Riadh HADJ MTIR 2011/2012 155
Oprateurs de comparaison (=)
SELECT *
FROM COMMANDE
WHERE MONTANT < 500;

SELECT *
FROM T_Customer
WHERE customer_name < 'M';

Riadh HADJ MTIR 2011/2012 156
Oprateurs de comparaison (>, <)
SELECT *
FROM COMMANDE
WHERE MONTANT >= 500;

SELECT *
FROM T_Customer
WHERE customer_name <= 'M';

Riadh HADJ MTIR 2011/2012 157
Oprateurs de comparaison (>=, <=)
SELECT *
FROM COMMANDE
WHERE NO_VENDEUR <> 9;

SELECT *
FROM T_Customer
WHERE customer_name <> 'IMPRESSIONS';

Riadh HADJ MTIR 2011/2012 158
Oprateurs de comparaison (<>)
BETWEEN : Intervalle ferm
Exemple:
SELECT *
FROM COMMANDE
WHERE MONTANT BETWEEN 100 AND 200;

MONTANT appartient l'intervalle [100, 200]

Riadh HADJ MTIR 2011/2012 159
Oprateurs de comparaison (BETWEEN)
NOT BETWEEN : Intervalle ouvert
Exemple:
SELECT *
FROM COMMANDE
WHERE MONTANT NOT BETWEEN 100 AND 200;

MONTANT appartient l'intervalle ]-, 100[ ]200, +[

Riadh HADJ MTIR 2011/2012 160
Oprateurs de comparaison (NOT BETWEEN)
L'oprateur teste si l'attribut a la valeur
NULL, c'est dire qu'aucune valeur n'a
t fournie.
Exemple:
SELECT COUNT(product_id)
FROM T_Product
WHERE product_description IS NULL;

Riadh HADJ MTIR 2011/2012 161
Oprateurs de comparaison (IS NULL)
L'oprateur LIKE utilise les caractres spciaux
% et _
Le caractre % remplace n'importe quel nombre
de n'importe quels caractres
Il remplace 0 n caractres
Le caractre _ remplace n'importe quel
caractre
Il remplace 1 seul caractre



Riadh HADJ MTIR 2011/2012 162
Oprateurs de comparaison (LIKE)
product_id product_name
---------- -------------
3 Computer Desk
5 Writer's Desk
6 8-Drawer Desk
8 Computer Desk
SELECT product_id, product_name
FROM T_Product
WHERE product_name LIKE '%Desk%'
Riadh HADJ MTIR 2011/2012 163
Les vues
Definitions
Une vue est une table virtuelle
elle n'existe pas dans la base
elle est construite partir du rsultat d'un SELECT.
La vue sera vu par l'utilisateur comme une table
relle.
Les vues permettent
des accs simplifis aux donnes
l'indpendance des donnes
la confidentialit des donnes : restreint les droits
d'accs certaines colonnes ou certains n-uplets.

Riadh HADJ MTIR 2011/2012 164
Les vues
Cration d'une vue : CREATE VIEW
La commande CREATE VIEW permet de crer une vue
en spcifiant le SELECT constituant la dfinition de la
vue
Syntaxe
create view nom [(col1, ...) ] as
select col1, col2, ...
from tab
where prdicat
[with check option]
La spcification des noms de colonnes de la vue est
facultative
Par dfaut, les colonnes de la vue ont pour nom les
noms des colonnes rsultat de SELECT

Riadh HADJ MTIR 2011/2012 165
Les vues (2)
Cration de vues partir de plusieurs tables
Exemple
crer une vue comportant le nom des employs, le nom du
service et le lieu de travail.
create view EMPLOYES2
as select ENAME, DNAME, LOC
from EMP emp, DEPT dept
where emp.DEPTNO = dept.DEPTNO
Requtes et vues
Pour rcuprer les donnes de vues, on procdera comme si
l'on tait en face d'une table classique
select * from EMPLOYES2
En ralit, cette table est virtuelle et est reconstruite chaque
appel de la vue EMPLOYES2 par excution du SELECT
constituant la dfinition de la vue

Riadh HADJ MTIR 2011/2012 166
Les vues (3)
Suppression d'une vue
Une vue peut tre dtruite par la commande
drop view nom-vue

Renommer une vue
Une vue peut tre renomme par la
commande
rename ancien-nom-vue to nouveau-nom-vue

Riadh HADJ MTIR 2011/2012 167
Les vues (4)
Riadh HADJ MTIR 2011/2012 168
Les squences
Une squence est un objet cr par lutilisateur
Elle sert crer des valeurs pour les cls
primaires, qui sont incrmentes ou
dcrmentes par le serveur Oracle
Noter que la squence est stocke et gnre
indpendamment de la table, et une squence
peut tre utilise pour plusieurs tables
Riadh HADJ MTIR 2011/2012 169
Squence
Riadh HADJ MTIR 2011/2012 170
Squence : cration
Exemple
Riadh HADJ MTIR 2011/2012 171
Squence (3)
Riadh HADJ MTIR 2011/2012 172
Squence : modification
Riadh HADJ MTIR 2011/2012 173
Squence : suppression
Un index est un objet qui peut augmenter
la vitesse de rcupration des lignes en
utilisant les pointeurs
Les index peuvent tre crs
automatiquement par le serveur Oracle ou
manuellement par lutilisateur
Ils sont indpendants, donc lorsque vous
supprimez ou modifiez un index les tables
ne sont pas affectes

Riadh HADJ MTIR 2011/2012 174
Index
Riadh HADJ MTIR 2011/2012 175
Index (2)
Quand crer un index
La colonne contient une large plage de valeurs
La colonne contient plusieurs valeurs nulles
Une ou plusieurs colonnes sont frquemment utilises dans la
clause WHERE ou pour les conditions de jointure
La table est grande et la plupart des requtes recherchent moins
de 2-4% des lignes
Quand ne pas crer des index
La table est petite
Les colonnes ne sont pas souvent utilises
Les requtes recherchent plus de 2-4% des lignes
La table est mise jour frquemment
Les colonnes indexes sont rfrences comme une partie de
lexpression


Riadh HADJ MTIR 2011/2012 176
Index (3)
Un synonyme est un nom alternatif pour
dsigner un objet de la base de donnes.
C'est aussi un objet de la base de
donnes
Riadh HADJ MTIR 2011/2012 177
Synonyme
Riadh HADJ MTIR 2011/2012 178
Synonyme (2)
Riadh HADJ MTIR 2011/2012 179
Synonyme (3)
Riadh HADJ MTIR 2011/2012 180


Chapitre 4

PL/SQL et les Triggers
Riadh HADJ MTIR 2011/2012 181
Partie I

Le langage PL/SQL
Exploitation des requtes SQL
Riadh HADJ MTIR 2011/2012 182
Le langage PL/SQL
PL/SQL : Procedural Language with SQL
C'est un langage de programmation propritaire
(Oracle) inspir de ADA.
Ce langage a fortement inspir de la norme
SQL3 car il est bien adapt la manipulation
d'une base de donne relationnelle
il utilise les mme types que SQL
il permet d'intgrer facilement des requtes dans le
code
il permet de dfinir des curseurs pour parcourir
squentiellement le rsultat d'une requte
Riadh HADJ MTIR 2011/2012 183
Introduction
Riadh HADJ MTIR 2011/2012 184
Moteur PL/SQL dans Oracle
Riadh HADJ MTIR 2011/2012 185
Bloc PL/SQL
if condition then instr
{elsif condition then instr}
[else instr]
end if ;
Riadh HADJ MTIR 2011/2012 186
Structures de contrle
case variable
{when expression then instr}
[else instr]
end case;
Riadh HADJ MTIR 2011/2012 187
Les Structures itratives
for i in [reverse] deb .. fin loop
instr
end loop;
loop
instr
exit when condition;
instr
end loop;
while condition loop
instr
end loop;
Riadh HADJ MTIR 2011/2012 188
Exemple : IF-THEN-ELSE
Dfinir une fonction factorielle :
appel
Les instructions peuvent tre crites sur
plusieurs lignes
Les identifiants peuvent contenir jusqu'
30 caractres et doivent :
tre encadrs de guillemets sils contiennent
un mot rserv
Commencer par une lettre
Avoir un nom distinct de celui d'une table ou
d'une colonne de la base
Riadh HADJ MTIR 2011/2012 189
Rgles syntaxiques
Dclarer et initialiser les variables dans la
section dclarative
Assigner une valeur une variable
Transmettre des valeurs dans les blocs
PL/SQL l'aide de paramtres
Visualiser les rsultats la console ou
dans un fichier :
DBMS_OUTPUT.PUT_LINE
UTL_FILE

Riadh HADJ MTIR 2011/2012 190
Gestion PL/SQL
identificateur [CONSTANT] TypeDeDonnes
[NOT NULL] [(:= | DEFAULT) expression];

Exemples
num NUMBER(4) ;
num2 NUMBER NOT NULL := 3.5 ;
en_stock BOOLEAN := false ;
limite CONSTANT REAL := 5000.00 ;
Riadh HADJ MTIR 2011/2012 191
La syntaxe des variables
La contrainte NOT NULL doit tre suivie
d'une clause d'initialisation

Les dclarations multiples ne sont pas
permises. Donc, on ne peut pas crire :

v1 , v2 NUMBER ;
Riadh HADJ MTIR 2011/2012 192
La syntaxe des variables (suite)
Riadh HADJ MTIR 2011/2012 193
Exemple de programme PL/SQL
Un type compos est
un type "record" : lorsque tous les attributs
sont d'un type SQL
une variable de type record peut reprsenter une
ligne d'une table relationnelle

un type collection : TABLE, VARRAY utiliss
en relationnel objet

un type objet : modle relationnel objet
Riadh HADJ MTIR 2011/2012 194
Dclaration dun type compos
Peut contenir un ou plusieurs champs de
type scalaire, RECORD ou TABLE
Similaire la structure d'enregistrement
utilise dans les L3G
Traite un ensemble de champs comme
une unit logique
Pratique pour rcuprer et traiter les
donnes d'une table
Riadh HADJ MTIR 2011/2012 195
Le type RECORD
Riadh HADJ MTIR 2011/2012 196
Le type RECORD : Exemple
Exemple:
Riadh HADJ MTIR 2011/2012 197
Lattribut %TYPE
Dclarer une variable partir d'un
ensemble de colonnes d'une table ou
d'une vue
Prfixer %ROWTYPE avec la nom de la
table de la base de donnes
Les champs dans le RECORD ont les
mmes noms et les mmes types de
donnes que les colonnes de la table ou
de la vue associes
Riadh HADJ MTIR 2011/2012 198
Lattribut %ROWTYPE
Riadh HADJ MTIR 2011/2012 199
Exploitation des requtes SQL
Les instructions INSERT, DELETE, UPDATE
s'crivent telles quelles dans un programme
Elles peuvent utiliser les variables du programme
Il faut donc donner des noms diffrents aux variables
du programme et aux colonnes des tables
manipules par le programme
Pour une requte dont le rsultat est constitu
d'une unique ligne, on peut utiliser la syntaxe
SELECT ... INTO....
Pour une requte qui ramne un nombre
quelconque de lignes, il faut utiliser un curseur
Riadh HADJ MTIR 2011/2012 200
Exploitation des requtes SQL
Riadh HADJ MTIR 2011/2012 201
create or replace procedure ajouterEmp(
leNom.employee.emp_name%type,
lePrenom.employee.emp_firstname%type) is

nouveauNum NUMBER ;
begin

select nvl(max(emp_no),0)+1 into nouveauNum from
employee ;

insert into employee(emp_no, emp_name, emp_firstname)
values(nouveauNum, leNom, lePrenom);

end ajouterEmp;
Exemple
Riadh HADJ MTIR 2011/2012 202
SELECT INTO
select emp_name, emp_firstname into le_nom, le_prenom
from Employee where emp_no = 346;
Ou bien
select * into emp_rec
from Employee where emp_no = 346;
NB : emp_rec de type Employee%rowtype
Un curseur est une structure de donnes
squentielle avec une position courante
On utilise un curseur pour parcourir le
rsultat d'une requte SQL dans un
programme PL/SQL.

On dclare un curseur en associant un
nom une requte :

CURSOR nom_curseur IS une_requte;

Riadh HADJ MTIR 2011/2012 203
Les Curseurs
On peut dfinir des paramtres en entre
utiliss dans la requte

CURSOR nom_curseur(p1, ..., pn) IS une_requte ;

Exemple
cursor emp_cursor(dnum NUMBER) is select salary, comm
from Employee where deptno = dnum ;

Riadh HADJ MTIR 2011/2012 204
Les Curseurs (2)
Si c est un curseur, la ligne courante est de type c%rowtype,
c'est dire du type de la ligne de la requte associe c.
Deux types de curseur :

Curseurs implicites : dclars pour toutes les
instructions LMD et les SELECT en PL/SQL

Curseurs Explicites : dclars et nomms au
sein du code source (par le dveloppeur)

Riadh HADJ MTIR 2011/2012 205
Les Curseurs (3)
Riadh HADJ MTIR 2011/2012 206
Les Curseurs explicites
Instructions :
OPEN : initialise le curseur
FETCH : extrait la ligne courante et passe la
suivante (pas d'exception si plus de ligne)
CLOSE : invalide le curseur
Si on veut parcourir toutes les lignes : boucle FOR
Attributs du curseur :
%found vrai si le dernier fetch a ramen une ligne
%notfound vrai si le dernier fetch n'a pas ramen de
ligne
%isopen vrai ssi le curseur est ouvert
%rowcount le nombre de lignes dj ramenes

Riadh HADJ MTIR 2011/2012 207
Les Curseurs explicites (2)
Riadh HADJ MTIR 2011/2012 208
Les Curseurs explicites : Exemple 1
declare
cursor c_proj is
select proj_name, proj_budget
from project order by proj_budget ;

proj_rec c_proj%rowtype ;
begin
open c_proj ;
loop -- parcours des lignes du curseur
fetch c_proj into proj_rec ;
exit when c_proj%notfound ;
... on utilise la ligne courante range dans proj_rec ...
end loop ;
close c_proj ;
end ;
Riadh HADJ MTIR 2011/2012 209
Les Curseurs explicites : Exemple 2
declare

cursor c_proj is
select proj_name, proj_budget
from project order by proj_budget ;

begin

for proj_rec in c_proj loop -- parcours des lignes du curseur

... on utilise la ligne courante range dans proj_rec ...

end loop ;
end ;
Quelque fois, PL/SQL dclare implicitement un
curseur :
pour les instructions du DML qui modifient la base
(INSERT, DELETE, UPDATE)
pour les requtes de la forme SELECT INTO.
Avec un curseur implicite, on peut obtenir des
informations sur la requte ralise, grce aux
attributs.
En effet SQL%attribut applique l'attribut sur la
dernire requte SQL excute
Riadh HADJ MTIR 2011/2012 210
Les Curseurs implicites
Riadh HADJ MTIR 2011/2012 211
Les Curseurs implicites : Exemple
delete from Employee where ...

if SQL%rowcount > 10 then
-- on a supprim plus de 10 lignes
...
end if ;
Riadh HADJ MTIR 2011/2012 212
Partie II

Les exceptions
Les modules stocks
En PL/SQL, la gestion des erreurs se fait grce
aux exceptions
Le mcanisme de dclenchement / traitement
d'exceptions est identique celui du langage
ADA
Il existe un certain nombre d'exceptions
prdfinies mais le programmeur peut bien sr
dfinir ses propres exceptions
Riadh HADJ MTIR 2011/2012 213
Introduction
BEGIN
...corps du bloc...
EXCEPTION
when exception1 [or exception2 ...] then
instructions ;
when exception3 [or exception4 ...] then
instructions ;
...
[when others then instructions ;]
END;

Riadh HADJ MTIR 2011/2012 214
Syntaxe
Si l'exception existe dans une clause When,
alors les instructions de cette clause sont
excutes et le programme est termin
Si l'exception n'existe pas dans une clause
When :
Soit il existe une clause When Others et dans ce cas
les instructions de cette clause sont excutes et le
programme est termin
Soit il n'y a pas de clause When Others et l'exception
est propage au bloc englobant ou au programme
appelant
Riadh HADJ MTIR 2011/2012 215
Excution des exceptions
DECLARE
pe_ratio NUMBER(3,1);
BEGIN
SELECT prix / gains INTO pe_ratio
FROM stocks WHERE symbol = XYZ';
-- pourrait provoquer une erreur de division par zro

INSERT INTO stats (symbol, ratio) VALUES ('XYZ', pe_ratio);

EXCEPTION
WHEN ZERO_DIVIDE THEN
INSERT INTO stats (symbol, ratio) VALUES ('XYZ', NULL);
END;
Riadh HADJ MTIR 2011/2012 216
Exemple
TOO_MANY_ROWS : instruction select ... into qui ramne plus d'une ligne.

NO_DATA_FOUND : instruction select ... into qui ne ramne aucune ligne.

INVALID_CURSOR : ouverture de curseur non valide.

CURSOR_ALREADY_OPEN : ouverture d'un curseur dj ouvert.

VALUE_ERROR : erreur arithmtique (conversion, taille, ...) pour un
NUMBER.

ZERO_DIVIDE : division par 0 ;

STORAGE_ERROR : dpassement de capacit mmoire.

LOGIN_DENIED : connexion refuse
Riadh HADJ MTIR 2011/2012 217
Exceptions prdfinies
On dclare l'exception nomException
grce l'instruction suivante :

nomException EXCEPTION ;
Riadh HADJ MTIR 2011/2012 218
Dclaration des exceptions
Les exceptions prdfinies sont associes des
codes d'erreur Oracle
Lorsqu'une exception n'est pas traite dans le
programme PL/SQL, le client qui a appel ce
programme reoit le code d'erreur associ
Pour lier un nom d'exception un code d'erreur,
on peut utiliser la directive :

PRAGMA EXCEPTION_INIT(nomException, codeErreur)
Riadh HADJ MTIR 2011/2012 219
Les exceptions et les codes derreur
create procedure detruitCompagnie...
restePilote EXCEPTION ;
PRAGMA Exception_init(restePilote, -2292);
begin
delete from compagnie where comp = 'MaCompagnie' ;
...
exception
when restePilote then
... traitement de l'erreur ...
end ;
Riadh HADJ MTIR 2011/2012 220
Exemple
create procedure detruitCompagnie(ma_comp VARCHAR2(20)) is
restePilote EXCEPTION ;
PRAGMA Exception_init(restePilote, -2292);
compagnieInexistante EXCEPTION ;
-- ce n'est pas ncessaire de la lier un code d'erreur
begin
delete from compagnie where comp = ma_comp ;
if SQL%NOTFOUND then
raise compagnieInexistante ;
end if ;
exception
when restePilote then
... traitement de l'erreur ...
when compagnieInexistante then
...
when others then
... on traite les autres erreurs
end ;
Riadh HADJ MTIR 2011/2012 221
Exemple de programme PL/SQL
NB: il est aussi possible de dclencher une
erreur, sans la lier une exception :

raise_application_error(codeErreur,messageErreur);

le code d'erreur est un entier ngatif compris
entre -20999 et -20000 (codes rservs aux
erreurs non prdfinies)
le message derreur est celui communiqu au
client (par exemple, affich sous SQL*Plus)
Riadh HADJ MTIR 2011/2012 222
Les exceptions et les codes derreur
Riadh HADJ MTIR 2011/2012 223
Les modules stocks
Un module stock est un programme
rang dans la base de donnes
On peut ainsi dfinir en PL/SQL :
des procdures
des fonctions
des paquetages
Ces programmes peuvent tre appels
par les programmes clients, et sont
excuts par le serveur
Riadh HADJ MTIR 2011/2012 224
Dfinition
Riadh HADJ MTIR 2011/2012 225
Procdure / Fonction
create or replace procedure p_name [ les_parametres ] is
declarations
begin
code PL/SQL
end ;
create or replace function f_name [ les_parametres ] return datatype
is
Declarations
begin
code PL/SQL
end ;
Pour dclarer un paramtre, la syntaxe est :
nom_param [mode] datatype [ := valeur_defaut ]

Il y a trois modes de passage de paramtre :

mode IN : paramtre en entre (par dfaut)

mode OUT : paramtre en sortie

mode IN OUT : paramtre en entre et sortie
Riadh HADJ MTIR 2011/2012 226
Les paramtres
create or replace function nom_dept(numero
dept.dept_no%type)
return VARCHAR2 is
nom dept.dept_name%type ;
begin
select dept_name into nom from dept
where dept_no = numero ;
return nom ;
end;
Riadh HADJ MTIR 2011/2012 227
Exemple 1
create or replace procedure nom_dept2 (
numero IN dept.dept_no%type,
nom OUT dept.dept_name%type) is

begin

select dept_name into nom
from dept
where dept_no = numero ;

end ;

Riadh HADJ MTIR 2011/2012 228
Exemple 2
Un paquetage permet de regrouper un
ensemble des procdures, exceptions,
constantes...
Un paquetage est compos de :
une spcification
un corps
La spcification du paquetage contient des
lments que l'on rend accessibles tous les
utilisateurs du paquetage
Le corps du paquetage contient l'implmentation
et ce que l'on veut cacher
Riadh HADJ MTIR 2011/2012 229
Les packages
La spcification contient :

des signatures de procdures et fonctions

des constantes et des variables

des dfinitions d'exceptions

des dfinitions de curseurs
Riadh HADJ MTIR 2011/2012 230
Les packages : Spcification
Le corps contient :

Les corps des procdures et fonctions de la
spcification (obligatoire)

D'autres procdures et fonctions (caches)

Des dclarations que l'on veut rendre prives

Un bloc d'initialisation du paquetage si
ncessaire
Riadh HADJ MTIR 2011/2012 231
Les packages : Corps
-- spcification
create or replace package mon_paq as
procedure p ;
procedure p(i NUMBER) ;
function p(i NUMBER) return NUMBER ;
cpt NUMBER ;
function get_cpt return NUMBER ;
mon_exception EXCEPTION ;
PRAGMA EXCEPTION_INIT(mon_exception, -20101);
end ;
/
Package cr.
Riadh HADJ MTIR 2011/2012 232
Les packages : Exemple
-- corps
create or replace package body mon_paq as
procedure p is
begin
dbms_output.put_line('toto');
end ;
procedure p(i NUMBER) is
begin
dbms_output.put_line(i);
end ;
function p(i NUMBER) return NUMBER is
begin
if (i > 10) then raise mon_exception ; end if ;
return i ;
end ;
function get_cpt return NUMBER is
begin return cpt ; end ;
end ;
/
Riadh HADJ MTIR 2011/2012 233
Les packages : Exemple (suite)
Riadh HADJ MTIR 2011/2012 234
Partie III

Les Triggers
Un trigger (dclencheur) est un
programme qui se dclenche
automatiquement suite un vnement

Il fait partie du schma (comme les
modules stocks) mais que l'on n'appelle
pas explicitement, la diffrence d'une
procdure stocke
Riadh HADJ MTIR 2011/2012 235
Dfinition
Riadh HADJ MTIR 2011/2012 236
Syntaxe
CREATE [OR REPLACE] TRIGGER nom_trigger
instant liste_evts
ON nom_table [FOR EACH ROW]
[WHEN ( condition ) ]

--Corps

instant ::= AFTER | BEFORE
liste_evts ::= evt {OR evt}
evt ::= DELETE | INSERT | UPDATE [OF { liste_cols }]
liste_col ::= nom_col { , nom_col }

--corps de pgme PL/SQL
On dfinit :
la table laquelle le trigger est li,
les instructions du DML qui dclenchent le trigger
le moment o le trigger va se dclencher par rapport
l'instruction DML (avant ou aprs)
si le trigger se dclenche
une seule fois pour toute l'instruction (i.e. trigger instruction),
une fois pour chaque ligne modifie/insre/supprime. (i.e.
trigger ligne, avec l'option FOR EACH ROW)
et ventuellement une condition supplmentaire de
dclenchement (clause WHEN)
Riadh HADJ MTIR 2011/2012 237
Entte du trigger
Si le trigger doit dterminer si l'instruction DML est
autorise, utiliser BEFORE

Si le trigger doit "fabriquer" la valeur d'une colonne pour
pouvoir ensuite la mettre dans la table : utiliser BEFORE

Si on a besoin que l'instruction DML soit termine pour
excuter le corps du trigger : utiliser AFTER

Riadh HADJ MTIR 2011/2012 238
After ou Before ?
Un trigger instruction se dclenche une
fois, suite une instruction DML

Un trigger ligne (FOR EACH ROW) se
dclenche pour chaque ligne modifie
par l'instruction DML

Riadh HADJ MTIR 2011/2012 239
Trigger ligne ou instruction ?
Dans un trigger ligne, on peut faire rfrence
la ligne courante, celle pour laquelle le trigger
s'excute
Pour cette ligne, on a accs la valeur avant
l'instruction DML (nomme :old) et la valeur
aprs l'instruction (nomme :new)

Riadh HADJ MTIR 2011/2012 240
Trigger ligne
:old :new
insert null ligne insre
delete ligne supprime null
update ligne avant modif ligne aprs modif

On peut dfinir une condition pour un
trigger ligne


le trigger se dclenchera pour chaque
ligne vrifiant la condition
Riadh HADJ MTIR 2011/2012 241
La clause When
Create or replace trigger journal_emp
after update of salary on EMPLOYEE
for each row
when (new.salary < old.salary)
-- attention, ici on utilise new et pas :new

begin

insert into EMP_LOG(emp_id, date_evt, msg)
values (:new.empno, sysdate, 'salaire diminu');

end ;
Riadh HADJ MTIR 2011/2012 242
Exemple
Les triggers se dclenchent dans l'ordre
suivant :
1. Triggers instruction BEFORE
2. Triggers ligne BEFORE (dclenchs n fois)
3. Triggers ligne AFTER (dclenchs n fois)
4. Triggers instruction AFTER
Riadh HADJ MTIR 2011/2012 243
Ordre dexcution des triggers

Vous aimerez peut-être aussi