Vous êtes sur la page 1sur 131

Version 1.1 22/05/00 ORACLEv2.1.

doc
ORACLE
SQL
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 2/131
Reproduction interdite
Rpartition du temps de formation
Prsentation des bases de donnes 0,5 j
Apprentissage du langage de requtes 1,5 j
Manipulation des structures 1 j
Utilisation des procdures stockes 2 j
PRO*C 1 j
Pr requis
Programmation vnementielle
Interfaces Homme/Machine
Login
TPSGBD
Password
TPSGBD
Chaine de connexion
toto2
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 3/131
Reproduction interdite
Table des matires
PRSENTATION DES BASES DE DONNES ................................................................................. 6
LE MODELE RELATIONNEL ORACLE ........................................................................................ 7
INTRODUCTION................................................................................................................................. 7
LE MODELE RELATIONNEL.......................................................................................................... 8
PRINCIPE DE BASE DU MODLE RELATIONNEL.......................................................................................... 8
LES AUTRES OBJETS MANIPULES DANS UNE BASE DE DONNES RELATIONNELLES...................................10
OBJECTIFS DUN SGBD RELATIONNEL................................................................................................ 13
CARACTRISTIQUES DORACLE ...........................................................................................................13
FONCTIONNALITS DUN SGBDR..........................................................................................................13
ARCHITECTURE GENERALE DUNE BASE DE DONNEES..................................................... 18
DESCRIPTION ........................................................................................................................................18
ARCHITECTURE PHYSIQUE DUNE BASE DE DONNEES....................................................... 19
PRSENTATION SCHMATIQUE...............................................................................................................19
STRUCTURE PHYSIQUE DUNE BASE DE DONNES.....................................................................................20
LA NOTION DINSTANCE........................................................................................................................23
LE DICTIONNAIRE DE DONNES .............................................................................................................24
ARCHITECTURE LOGIQUE DUNE BASE DE DONNEES........................................................ 25
GNRALITS........................................................................................................................................25
PRSENTATION CONCEPTUELLE .............................................................................................................26
STRUCTURE LOGIQUE ET STRUCTURE PHYSIQUE......................................................................................27
NOTION DE TABLESPACE...................................................................................................................27
SEGMENT, EXTENSION ET BLOC.....................................................................................................28
ARCHITECTURE FONCTIONNELLE DORACLE..................................................................... 29
INTRODUCTION.....................................................................................................................................29
ARCHITECTURE FONCTIONNELLE...........................................................................................................30
LES OUTILS DE GNIE LOGICIEL...............................................................................................................33
OUTILS DE DVELOPPEMENT DAPPLICATIONS........................................................................................34
OUTILS DAIDE LA DCISION ...............................................................................................................34
OUTILS DADMINISTRATION..................................................................................................................35
ARCHITECTURE RPARTIE DORACLE.....................................................................................................35
LOUVERTURE DAUTRES SGBD.........................................................................................................36
APPRENTISSAGE DU LANGAGE DE REQUTES ...................................................................... 37
PRSENTATION DES TABLES................................................................................................................. 38
CONSULTATION DES TABLES................................................................................................................ 40
ORDRE SELECT SIMPLE........................................................................................................................40
CONSULTATION AVEC QUALIFICATION (OU RESTRICTION).......................................................................42
TRI DU RSULTAT..................................................................................................................................47
GROUPEMENT DES DONNES ..................................................................................................................47
OPRATEURS ENSEMBLISTES..................................................................................................................49
MISE JOUR DES TABLES .................................................................................................................... 51
COMMIT / ROLLBACK ...........................................................................................................................51
INSERTION ............................................................................................................................................51
MODIFICATION .....................................................................................................................................52
SUPPRESSION.........................................................................................................................................54
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 4/131
Reproduction interdite
LES FONCTIONS SQL.......................................................................................................................... 55
FONCTIONS DE DATE .............................................................................................................................55
FONCTIONS NUMRIQUES ......................................................................................................................55
FONCTIONS SUR CHANES DE CARACTRES..............................................................................................57
FONCTIONS DE CONVERSION ..................................................................................................................58
MANIPULATION DE STRUCTURE .............................................................................................. 59
LES USERS ........................................................................................................................................... 60
CRATION.............................................................................................................................................60
MODIFICATION .....................................................................................................................................60
LES PROFILS ....................................................................................................................................... 61
LES RLES .......................................................................................................................................... 62
LES GRANTS........................................................................................................................................ 63
LES REVOKES...................................................................................................................................... 64
LES SYNONYMES ................................................................................................................................. 65
LES INDEX ........................................................................................................................................... 66
CHOIX DES COLONNES INDEXER. .........................................................................................................66
CAS O LES INDEX NE SONT JAMAIS UTILISS. .........................................................................................66
ORDRES SQL SUR LES INDEX. .................................................................................................................67
UTILISATION DES PROCDURES STOCKES .......................................................................... 69
GNRALITS...................................................................................................................................... 70
PL/SQL................................................................................................................................................70
INTGRATION DES INSTRUCTIONS SQL...................................................................................................70
INSTRUCTIONS SPCIFIQUES AU PL/SQL.................................................................................................70
BLOC PL/SQL.......................................................................................................................................70
GESTION ET UTILISATION DES VARIABLES............................................................................................. 71
VARIABLES LOCALES .............................................................................................................................71
VARIABLES EXTRIEURES.......................................................................................................................73
STRUCTURES DE CONTRLE ................................................................................................................. 74
TRAITEMENT CONDITIONNEL (IF) ..........................................................................................................74
TRAITEMENTS RPTITIFS (LOOP, FOR, WHILE)..................................................................................74
CURSEURS ........................................................................................................................................... 76
DFINITION...........................................................................................................................................76
ATTRIBUTS DUN CURSEUR IMPLICITE....................................................................................................76
UTILISATION DES CURSEURS EXPLICITES.................................................................................................76
BLOCS IMBRIQUS.............................................................................................................................. 84
NOTION DE BLOCS DANS UN BLOC PL/SQL : SOUS-BLOCS .................................................................84
VISIBILIT DES VARIABLES .....................................................................................................................84
EXCEPTIONS........................................................................................................................................ 85
ERREURS INTERNES ORACLE................................................................................................................85
ERREURS UTILISATEUR ..........................................................................................................................87
IDENTIFICATION ERREUR GRE PAR WHEN OTHERS...........................................................................88
PROPAGATION DES ERREURS..................................................................................................................89
PL/SQL DANS LES OBJETS DE LA BASE................................................................................................ 90
PROCDURES STOCKES.........................................................................................................................90
FONCTIONS...........................................................................................................................................92
PACKAGE............................................................................................................................................. 94
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 5/131
Reproduction interdite
PRSENTATION .....................................................................................................................................94
DATABASE TRIGGERS............................................................................................................................97
SQLPLUS........................................................................................................................................... 99
INTRODUCTION........................................................................................................................... 100
CONNEXION.................................................................................................................................. 101
UNIX .................................................................................................................................................. 101
WINDOWS........................................................................................................................................... 101
COMMANDES UTILES......................................................................................................................... 102
FORMATAGE. ..................................................................................................................................... 104
FORMATAGE COLONNE........................................................................................................................ 104
BREAK................................................................................................................................................ 104
COMPUTE........................................................................................................................................... 105
LOGIN.SQL........................................................................................................................................ 107
TRUCS ET ASTUCES..................................................................................................................... 108
LES OBJETS QUE LON POSSDE. ....................................................................................................... 109
LES INDEX DUNE TABLE. .................................................................................................................... 110
LES DOUBLONS DUNE TABLE. ............................................................................................................ 111
METTRE DES TRACES DANS LES PROCDURES PL/SQL...................................................................... 112
QUELS SONT LES INDEX UTILISS POUR UNE REQUTE SQL DONNE. ................................................. 113
ANNEXE............................................................................................................................................. 116
ANNEXE 1 : DESCRIPTION DE LA TABLE PLAN_TABLE ....................................................................... 116
ANNEXE 2 : SCRIPT DE CRATION DE LA BASE DE TP............................................................................. 117
ANNEXE 3 : CONTENU DES TABLES DU TP ............................................................................................ 120
ANNEXE 4 : RAPPELS DE SYNTAXE........................................................................................................ 122
EXERCICES ........................................................................................................................................ 126
DESCRIPTION DU CONTEXTE DE L'EXERCICE.......................................................................................... 126
ENONC DES EXERCICES....................................................................................................................... 127
CORRIG DES EXERCICES...................................................................................................................... 131
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 6/131
Reproduction interdite
Prsentation des bases de donnes
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 7/131
Reproduction interdite
LE MODELE RELATIONNEL ORACLE
INTRODUCTION
Une base de donnes est dfinie comme un ensemble intgr de donnes permettant de modliser un
univers. Cet univers est compos dobjets inter relis. Les objets dun mme type constituent une entit et le
lien entre deux entits est appel association. Les entits et les associations sont constitues chacune dun
ensemble de caractristiques et sont dcrites dans un modle de donnes.
Le modle de donnes relationnel est caractris par la simplicit de la reprsentation des donnes et par
la puissance de ses oprateurs de manipulation de donnes.
Le modle relationnel est caractris par :
Une collection dobjets appele encore relations pour stocker les donnes.
Une liste doprations pour agir sur les relations.
Des rgles dintgrit pour garantir lexactitude et la consistance des donnes.
Les fonctions dune Base de Donnes Relationnelle sont les suivantes :
Grer le stockage des donnes.
Contrler laccs aux donnes.
Fournir des moyens dinterroger et de modifier les donnes.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 8/131
Reproduction interdite
LE MODELE RELATIONNEL
Principe de base du modle relationnel
Le principe de base du modle relationnel consiste reprsenter aussi bien les entits que les liens
laide de relations appeles aussi tables. Une table est une structure tabulaire dont les colonnes, appeles
aussi attributs, correspondent aux caractristiques de lentit ou de lassociation reprsenter et les lignes,
appele aussi tuples ou enregistrements, correspondent aux donnes.
Une base de donnes relationnelle est donc constitue dun ensemble de tables deux dimensions.
Terminologie

La table est donc la structure de base dun SGBDR (SGBD Relationnel), constitue dune ou plusieurs
colonnes et de zro, une ou plusieurs lignes
Une colonne correspond donc un type de donnes dans une table, est dcrite par un nom de
colonne et stocke des donnes dun type et dune taille spcifique.
Une ligne est une combinaison de colonnes dans une table et correspond une occurrence de
linformation contenu dans la table.
Un champ se trouve lintersection entre une ligne et une colonne et contient une donne.
Une cl primaire est la ou les colonnes qui identifient de manire unique chaque ligne dune table.
Elle doit toujours tre renseigne.
Une cl trangre est une colonne ou un ensemble de colonnes qui rfrencent une cl primaire,
appartenant soit la mme table, soit une autre table. Une valeur prise par une cl trangre doit
ncessairement correspondre une valeur de la cl primaire ou tre nulle.
Caractristiques dune table
Chaque ligne doit tre identifie de manire unique par une cl primaire, afin dinterdire les doublons.
Lordre des lignes dans la table nest pas significatif : par dfaut les lignes sont tries dans lordre
selon lequel elle ont t insres.
Chaque colonne porte un nom unique et possde dans sa dfinition des rgles dintgrit des donnes.
Lordre des colonnes na pas dimportance quand on stocke les donnes ; cependant on spcifiera lors
dune interrogation lordre des colonnes que lon souhaite.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 9/131
Reproduction interdite
Proprits des Bases de Donnes Relationnelles
Une base de donnes est, comme nous venons de le voir, une collections dobjets individuels, tels les
tables. Nous verrons par la suite que les tables ne sont pas les seuls objets manipuls dans une base ( vues,
squences, index, synonymes,...). Par ailleurs, il nest pas ncessaire de spcifier le chemin daccs aux
tables, ni de savoir comment les donnes sont stockes physiquement pour les manipuler.
Laccs et la manipulation des objets de la base se fait en excutant des commandes SQL (Structured
Query Language). SQL est un langage standard dfinit par ANSI (American National Standard Institute) et
constitu dun ensemble de commandes de dfinition et de manipulation de donnes dans une base de
donnes.
Ce langage propose une grande varit doprateurs et permet de modifier de manire aise une base de
donnes.
Le modle relationnel assure une indpendance physique complte.
Notion de Contraintes dintgrit
En mettant en place des contraintes dintgrit on garantira que les utilisateurs effectuent uniquement des
manipulations laissant la base de donnes dans un tat correct et consistant aprs chacune de leur
manipulation. Les contraintes dintgrit seront de prfrence mises en place dans la base de donnes, mais
peuvent tre aussi intgres au niveau des programmes de lapplication.
Elles peuvent tre de 4 ordres :
Entit : une colonne faisant partie dune cl primaire ne peut tre nulle et la valeur doit tre unique.
Rfrentielle : la valeur dune cl trangre doit soit correspondre une cl primaire soit tre nulle.
Colonne : la valeur contenue dans une colonne doit correspondre au type de donnes de la colonne.
Dfinies par lutilisateur : les valeurs doivent respecter les rgles de gestion.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 10/131
Reproduction interdite
Les autres objets manipules dans une Base de
Donnes Relationnelles
Notion de schma de base de donnes
Un schma est un ensemble de structures logiques de donnes qui appartiennent un utilisateur de la
base de donnes et porte son nom. De ce fait, un utilisateur ne peut avoir quun seul schma.
Les objets qui peuvent tre manipuls dans un schma de base de donnes sont les suivants :
Cluster :
Un cluster (groupement) est un objet du schma contenant une ou plusieurs tables qui ont une ou
plusieurs colonnes communes. Il correspond une structuration de donnes dans une ou plusieurs tables pour
permettre un accs rapide aux lignes issues dune jointure.

Lien de base de donnes (database link) :
Un lien de base de donnes est un objet dans la base locale qui permet laccs une base distante ou de
monter une seconde base en mode de lecture seulement. La base distante peut tre une base ORACLE ou
non.

Index :
Un index est une structure contenant ladresse physique de chaque ligne dune table ou dun cluster. Il
permet laccs direct et rapide linformation.
Package :
Un package est une collection de fonctions, de procdures et dautres objets stocks ensemble au sein
dune base de donnes. Lensemble des objets doit tre spcifi lors de la cration du package. Il existe 2
type de package :
les packages privs
les packages public

Procdure :
Une procdure est un ensemble nomm de commandes PL/SQL qui sont stockes dans la base de
donnes.

Fonction :
Une fonction est un ensemble nomm de commandes PL/SQL. Elle retourne une valeur lappelant
contrairement une procdure .

Squences :
Une squences est un objet de la base de donnes partir duquel plusieurs utilisateurs peuvent gnrer
des entiers uniques dont les valeurs respectent un certains nombre de proprits.
Snapshot :
Un snapshot (clich) est une table qui contient le rsultat dune requte dfinie sur une ou plusieurs tables
ou vues localise sur une base de donnes distante. Les tables et les vues de la requte sont appeles les
tables matres et leur base est appele base matre.
Les snapshots sont utiliss dans le contexte rparti et permettent de maintenir des copies des donnes
de la base distante sur le nud local en n lecture seulement.


Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 11/131
Reproduction interdite


Snapshot Log :
Un snapshot log (journal de clich) est une table associe la table matre du snapshot. ORACLE
sauvegarde les modifications des donnes de la table matre dans le journal snapshot et lutilise ensuite pour
rafrachir le snapshot.
Vues :
Une vue est une reprsentation logique issue de la combinaison de la dfinition dune ou plusieurs tables
ou vues. Elle obtient ses donnes partir des tables sur lesquelles elle est base.
Les vues sont utilises pour :
assurer la scurit des donnes,
masquer la complexit des donnes,
rduire la complexit de la syntaxe des requtes,
reprsenter les donnes dans une autre perspective.

Dclencheur (trigger) :
Un trigger est une procdure stocke dans la base et associe un vnement pouvant intervenir sur une
table. Cette procdure sexcute quand une commande SQL spcifie de mise jour (insertion, modification
ou suppression) affecte la table associe au dclencheur.
Profil :
Un profil est un ensemble de limitation de ressources de la base de donnes. Laffectation dun profil un
utilisateur permet de contrler le dpassement de ses limites.

Rle :
Un rle est un ensemble de privilges qui peut tre attribu des utilisateurs ou dautres rles.

Segment rollback :
Un segment rollback (segment dannulation) est un objet utilis par ORACLE pour sauvegarder les
donnes ncessaire pour valider ou dfaire des transactions.

Tablespace :
Une tablespace est une allocation despace de disque dans la base de donnes pour contenir des objets.
Identification dobjets dans ORACLE
Les noms des objets peuvent avoir une longueur allant de 1 30 caractres sauf pour les noms de bases
de donnes qui sont limits 8 caractres et ceux des liens de base de donnes 128 caractres. Il ny a
aucune diffrence entre caractres minuscules et majuscules dans un SGBDR.
Un nom doit commencer par un caractre alphabtique et peut contenir une chane alphanumrique et ne
doit pas tre un mot cl rserv pour ORACLE. Il doit tre un identifiant unique au sein dun mme espace de
noms.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 12/131
Reproduction interdite
Les objets dun schma sont regroups en six espaces de noms comme lindique la figure suivante :
Tables
Vues
Squences
Synonymes
Procdures
Fonctions
Packages
Snapshots
Index
Clusters
Triggers
Liens BD
Contraintes
Les objets ne faisant pas partie dun mme schma sont galement regroups et concernent la totalit de
la base de donnes. Ils sont reprsents de la manire suivante :
Utilisateurs,Rles
Synonymes publics
Liens BD publics
Tablespaces
Segments Rollback
Profils
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 13/131
Reproduction interdite
Objectifs dun SGBD Relationnel
Caractristiques dORACLE
ORACLE est un diteur de base de donnes qui propose des produits et des services couvrant les
besoins des systmes dinformation.
En effet, Oracle est avant tout un SGBD (Systme de Gestion de Bases de Donnes) relationnel. Sa
fonction premire est de grer dune faon intgre lensemble des donnes dune entreprise et de les rendre
accessibles un nombre important dutilisateurs et dapplications tout en garantissant leur scurit, leur
cohrence et leur intgrit.
La portabilit dORACLE sur une trs grande varit de plates-formes matrielles et systmes
dexploitation, la compatibilit aux normes internationales et son architecture rpartie font de lui lun des SGBD
les plus utiliss.
De plus, ORACLE offre en plus de son SGBD une trs grande varit doutils utilisables dans toutes les
tapes dun projet dinformatisation, depuis la spcification du besoin jusqu' lexploitation dapplications
dveloppes.
En tant que SGBDR, ORACLE stocke et gre les informations avec toute la puissance du relationnel. Par
ailleurs, il dispose dun moteur procdural, PL/SQL, qui permet de stocker dans la base de donnes des sous-
programmes, tels des procdures et fonctions ou bien encore des triggers. Laccs aux donnes met en jeu un
optimiseur qui peut fonctionner selon diffrentes rgles.
Son rle premier est dassurer la scurit des donnes en contrlant laccs et lutilisation de la base.
Ses autres caractristiques sont ses mcanismes labors de verrouillage qui garantissent la consistance en
lecture et la protection des donnes.
Les applications dveloppes avec les outils Oracle peuvent tourner sur la mme machine que le SGBD
ORACLE ; elles peuvent tre aussi installes en local sur un micro de lutilisateur et accder via le rseau la
base de donnes situe sur une autre machine (architecture client/serveur).
Fonctionnalits dun SGBDR
Les principales fonctionnalits que doit assurer un SGBDR sont :
la dfinition des donnes,
la manipulation des donnes,
la scurit et lintgrit des donnes,
la gestion des transactions et des accs concurrents,
la sauvegarde et la restauration des donnes.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 14/131
Reproduction interdite
La dfinition des donnes

Comme nous lavons vu prcdemment, une base de donnes relationnelle se prsente comme un
ensemble de relations do le nom de modle. Ces relations sont aussi appeles tables et constituent la
structure de donnes dune base de donnes relationnelle.

ORACLE dispose dun langage permettant la dfinition et la manipulation des donnes : SQL.
Le rle dun langage de dfinition de donnes (LDD) est de dcrire et de dfinir prcisment une base
de donnes et les objets qui la composent. Ces objets sont : les schmas, les tables, les synonymes, les
squences, les index, les clusters et les vues.

Le LDD doit permettre :
la cration, modification et suppression dobjets conceptuels (tables, index, cluster, ...),
la description de structures physiques,
la cration, modification et suppression de chemin daccs (rorganisation),
la dfinition de vues,
la modification de visions partielles

Un LDD est compos dun ensemble de commandes portant sur des objets conceptuels (ou logiques) et
sur des objets physiques.

Lensemble des descriptions dobjets dune base de donnes constitue ce quon appelle un dictionnaire
de donnes. Ce dictionnaire de donnes est gnralement structur et gr lui mme comme une base de
donnes. La consquence de cette organisation est que les descriptions des objets conceptuels et physiques
peuvent tre manipules de la mme faon que leurs valeurs. Il est possible alors dditer le contenu de ce
dictionnaire pour des besoins de statistiques, de dveloppement ou de documentation.


La manipulation des donnes
La manipulation des donnes recouvre toutes les oprations dchange de donnes entre les utilisateurs
et la base de donnes. Ces changes de donnes peuvent tre sous forme de consultation ou de mise jour
(insertion, modification et suppression). A ces oprations dchange de donnes, on peut aussi ajouter les
manipulations de bases permettant louverture ou la fermeture dune base de donnes.
La manipulation de donnes se fait laide dun langage dit langage de manipulation de donnes
(LMD) : SQL.
Ce langage relationnel constitue pour les utilisateurs lunique moyen daccder la base de donnes.
Le langage de manipulation de donnes (LMD) est donc un ensemble de commandes permettant la
consultation et la mise jour des objets crs par le langage de dfinition de donnes (LDD).
Pour manipuler les donnes, le modle relationnel dispose dun ensemble doprateurs ensemblistes,
dont lapplication des tables constitue lalgbre relationnelle.
Il existe 2 types doprateurs :
les oprateurs unaires sappliquant une seule table : la projection et la SELECTion,
Les oprateurs binaires sappliquant deux tables : lunion, lintersection, la diffrence, le produit
cartsien, la jointure,...

Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 15/131
Reproduction interdite
Dfinitions :
La SELECTion consiste ne retenir dune table que les lignes vrifiant une condition donne.
La projection dune table sur certaines de ses colonnes ne rend que les colonnes correspondantes.
Lunion de deux tables donne une troisime table compose de toutes les lignes des 2 tables.
Lintersection de deux tables a comme rsultat une table compose de toutes les lignes communes.
Le rsultat de la diffrence de deux tables est lensemble des lignes qui appartiennent exclusivement
la premire table.
Le produit cartsien de deux tables est une table dont le schma est compos des colonnes de la
premire et de la deuxime table et dont les lignes sont obtenues par concatnation de chaque ligne de la
premire avec toutes les autres de la seconde.
La jointure de deux tables nest possible que si ces deux tables ont chacune une ou plusieurs
colonnes dfinies sur le mme domaine. Elle donne comme rsultat un sous-ensemble du produit cartsien
compos des lignes qui vrifient la condition de jointure (<,<=n>,>=,#).
Cependant, les oprateurs ensemblistes de lalgbre relationnelle ne peuvent pas constituer eux seuls
un langage de manipulation de donnes. Le langage SQL permet aussi :
de prciser le type dopration excuter,
deffectuer des calculs arithmtiques (somme, moyenne, maximum,...),
deffectuer des conversions (caractre numrique, majuscule minuscule, dates,...),
deffectuer la mise en forme de rsultats, ...
Les commandes de ce langage peuvent tre utilises dune faon interactive via SQL*Plus ou dans un
programme dapplication crit en langage de troisime ou quatrime gnration.
Une extension procdurale du langage SQL est disponible avec le PL/SQL afin de dvelopper des
traitements ncessitant une algorithmique plus complexe.
Le PL/SQL permet donc de grouper un ensemble de commandes et de les soumettre au noyau comme un
bloc unique de traitement. Cette extension est compose de commandes de manipulation de donnes (LMD),
doprateurs, de curseurs et de traitement de transactions. Lensemble est combin par des instructions de
branchement conditionnel ou inconditionnel, des instructions de rptition et des affectations.
Dautre part, les traitement rptitifs peuvent tre stocks dans la base de donnes et invoqus chaque
fois quon en a besoin. Ce sont les procdures stockes. Celles-ci peuvent tre appeles par des programmes
utilisateurs ou par le systme, suite la ralisation dun vnement (triggers).
NB: Une autre partie du cursus permet de se familiariser plus amplement avec le langage SQL et la
syntaxe de ses ordres.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 16/131
Reproduction interdite
La scurit et lintgrit des donnes
Cette fonctionnalit consiste garantir que seuls les utilisateurs autoriss peuvent effectuer des
oprations correctes sur la base de donnes de sorte que celle-ci soit maintenue dans un tat cohrent.
Ceci entrane :
une gestion des autorisations par un contrle sur les utilisateurs accdant la base de donnes ainsi
que sur les types doprations quils sont autorises effectuer. Cette gestion est attribue ladministrateur
de la base et inclus la possibilit de crer et de supprimer des utilisateurs et de leur attribuer ou retirer des
droits ( privilges ) sur la manipulation des donnes.

un contrle sur la validit des oprations effectues qui doivent respecter certaines rgles dites
contraintes dintgrit smantique. Il en existe plusieurs types. Certaines imposent que la base vrifie certaines
conditions des moments donnes (contraintes dintgrit temporelle), dautres imposent que des
modifications de certaines donnes de la base entranent des modifications smantiques de donnes lies
(contraintes dintgrit rfrentielles).

une protection des donnes contre les accs malveillants. Les accs malveillants sont gnralement
vits par lattribution de mots de passe aux utilisateurs autoriss accder aux donnes, ainsi que par le non
accs au contenu physique de la base. Des vues peuvent aussi tre dfinies afin de restreindre laccs aux
donnes en donnant une vision partielle de la base de base. En effet, pour permettre un utilisateur de
naccder qu quelques colonnes ou lignes dune table, on dfinit une vue sur cette table et on nautorise
cet utilisateur que laccs travers cette vue.

une protection des donnes contre les pannes dues aux manipulations incorrectes, aux incidents
logiciels ou matriels par des mcanismes permettant la survie des bases gres et leur remise dans un tat
cohrent.
Les fonctionnalits relatives la scurit et lintgrit des donnes constituent une des tches
essentielles de ladministrateur de base de donnes.
La gestion des transactions et des accs concurrents
Le principal objectif de lintroduction dune base de donnes dans le systme dinformation est de mettre
la disposition dun grand nombre dutilisateurs un ensemble intgre de donnes. Ces donnes peuvent tre
alors accdes et manipules simultanment par diffrents utilisateurs.
Un SGBDR assure cette cohrence laide des concepts de transactions et des accs concurrents.
n LA GESTION DES TRANSACTIONS
Une transaction est dfinie comme une unit logique de traitement qui, applique un tat cohrent de la
base de donnes, restitue un nouvel tat cohrent , mais modifi de la base. Elle ne peut qutre excute
compltement , on dit alors quelle est valide (COMMIT) ou pas du tout, on dit alors quelle est annule
(ROLLBACK).
Un SGBDR permet la dfinition, la validation ou lannulation de transactions.
Une transaction vrifie les critres ACID :
Atomicit : une transaction doit effectuer toutes ses mises jour ou ne rien faire du tout. En cas
d'chec, une transaction doit annuler toutes les modifications qu'elle a engages.
Cohrence : une transaction doit faire passer la base de donnes d'un tat cohrent un autre. En cas
d'chec, l'tat cohrent initial doit tre restaur.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 17/131
Reproduction interdite
Isolation : avant le COMMIT, les modifications ne sont visibles que par le processus faisant la
transaction.
Durabilit : ds qu'une transaction valide ses modifications, le systme doit garantir que ces
modifications seront archives en cas de panne.
Et a t c oh r e nt
de l a ba s e de
d o n n e s
Et a t c oh r e nt
de l a ba s e de
d o n n e s
Tr a ns a c t i on
( C O M M I T : < T O U T > )
( R O L L B A C K : < R I E N > )
Tr a ns a c t i on
n LA GESTION DES ACCES CONCURRENTS
Pour garantir un paralllisme dexcution des transactions, une gestion fine des accs concurrents est
ncessaire. Ainsi, plusieurs transactions peuvent tre excutes simultanment permettant ainsi un haut dbit
transactionnel. Cependant, il faut veiller ce que lexcution parallle des transactions donne le mme rsultat
quune excution squentielle. Pour ce faire, la solution classique consiste verrouiller momentanment les
donnes utilises par une transaction jusqu' la fin de mise jour.
Les autres transactions demandant ces donnes sont mises en attente jusqu' leur libration
(dverrouillage).
Cette technique de verrouillage permet aussi de protger les donnes contre des oprations de mises
jour incorrectes ou affectant les structures (effectues par plusieurs utilisateurs concurrents).
Un SGBDR tel ORACLE applique par dfaut les verrouillages adquats offrant ainsi le maximum de
concurrence daccs. Cependant lutilisateur a toujours la possibilit deffectuer des verrouillages explicites en
utilisant les commandes adquates.
La consquence de cette technique de verrouillage est le risque dinterblocage (dit aussi verrou mortel) au
cas o deux (ou plusieurs) transaction se trouvent dans un tat o chacun attend la libration dune partie de
donnes qui sont encours dutilisation par lautre.
Un SGBDR dispose de mcanisme permettant la dtection dinterblocage et le dblocage de la situation
en avortant le travail de lun des utilisateurs selon certaines rgles.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 18/131
Reproduction interdite
ARCHITECTURE GENERALE DUNE BASE DE
DONNEES
Description
La description des donnes dans un SGBD se fait trois niveaux :
le niveau conceptuel ou logique
le niveau interne ou physique
le niveau externe
Cette sparation permet, dune part, une indpendance entre la smantique des donnes et leur
implmentation physique, et, dautre part, de donner des visions restreintes et adaptes chaque type
dutilisateurs. Lun des principaux rles du SGBD est de permettre la description de chacun de ces 3 niveaux
et dassurer la correspondance entre eux travers le dictionnaire de donnes.
Structure dune Base de Donnes
Ni veau
externe
Ni veau
conceptuel
Ni veau
physique
Schma
externe
Schma
externe
Schma
externe
Schma
conceptuel
Schma
interne
Le niveau conceptuel correspond lunivers rel modliser. En effet, il dcrit la fois les entits avec
leurs caractristiques, les liens entre les entits, ainsi que leurs rgles de gestion, appeles contraintes
dintgrit.
A ce niveau on fait abstraction de lutilisation des donnes ainsi que de leur implmentation physique.
Le niveau interne dcrit lui la faon dont les objets sont stocks sur le disque et la correspondance entre
structures logiques de donnes et structures physiques. Le choix des structures de stockage doit se faire en
tenant compte des contraintes dimplmentation et de lutilisation qui sera faite des donnes de faon
optimiser les accs la base.
Le niveau externe correspond aux vues que vont avoir les diffrents utilisateurs des entits du schma
conceptuel. Ces diffrentes vues sont dcrites laide de schmas externes traduisant un type dutilisation de
la base de donnes.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 19/131
Reproduction interdite
ARCHITECTURE PHYSIQUE DUNE BASE DE
DONNEES
Prsentation schmatique
Une base de donnes relationnelle est constitue de 5 types dlments fondamentaux :
Les fichiers constituant la structure physique de la base de donnes.
La S.G.A constituant la structure mmoire de la base.
Les processus.
Linstance de base de donnes.
Le dictionnaire de donnes.
Architecture standard dune base
PMON SMON
SYSTEM GLOBAL AREA
ZONE DE
PARTAGE DES
ORDRES SQL
BUFFER
REDO LOG
BUFFER CACHE
DE LA BASE DE
DONNEES
SERVEUR
DEDIE
DBWR ARCH LGWR
USERS
Fichiers dela
Base de Donnes
Fichiers
Redo Log
Fichiers
de contrle
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 20/131
Reproduction interdite
Structure physique dune base de donnes
La structure physique dune base de donnes est compose dun ensemble de fichiers qui constituent le
support physique de stockage de donnes et dont la structure est dpendante de lOS. Une base de donnes
Oracle est compose physiquement dun ou plusieurs fichiers stockant les structures logiques de celle-ci.
Nous distinguons 3 types de fichiers :
g les fichiers de donnes (Data files),
g les fichiers de reprise (Redo Log files),
g les fichiers de contrle (Control files).
La spcification des fichiers de donnes et de reprise se fait lors de la cration ou de la modification de la
structure dune base de donnes.
les fichiers de donnes (DATABASE)

Ils contiennent toutes les donnes de la base (donnes utilisateurs + donnes du dictionnaire de
donnes).
Ils assurent le stockage des objets crs par les utilisateurs (tables, index, cluster, rollback
segment,...) ainsi que ceux ncessaires au fonctionnement dORACLE (dictionnaire de donnes).
Lors de la cration dune base de donnes, il doit y avoir au moins un fichier de donnes pour stocker
le dictionnaire de donnes.
Ils sont associs une et une seule base.
La taille dun fichier de donnes (exprime en Ko ou Mo) est attribue au moment de sa cration et ne
peut jamais tre modifie.
Lajout de fichiers permet daugmenter le volume dune base.
Les fichiers sont constitus dun ensemble de blocs OS.
La taille dun bloc ORACLE dpend de lOS.
Proprits :
Regroups en TABLESPACE
Composs dun ensemble dextensions
Chaque extent est un ensemble de bloc ORACLE
Une fois utilis par ORACLE, on ne peut plus ni les modifier ni les supprimer
les fichiers de reprise (REDO LOG)
Ils contiennent les modifications de donnes les plus rcentes. Toute opration de mise jour de la
base de donnes est enregistre dans ces fichiers.
Ils seront utiliss en cas de perte des fichiers DATABASE.
Ils sont au moins deux et ont un fonctionnement circulaire.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 21/131
Reproduction interdite
les fichiers de contrle
Ils contiennent la description physique de la base :
le nom de la base de donnes
le nom et le chemin daccs aux fichiers de donnes et de reprise
la date et heure de cration de la base
les informations concernant la cohrence de la base
Pour pouvoir dmarrer une base de donnes, il doit y avoir au moins un fichier de contrle.
Il est recommand den avoir plusieurs et de les localiser physiquement sur des disques diffrents.
Tous les fichiers de contrle sont mis jour simultanment et sont grs automatiquement par
ORACLE.
Structure mmoire : SGA
La structure mmoire dORACLE permet de conserver toutes les informations de faon ce quelles
puissent tre partages par tous les process.
Elle est constitue essentiellement dune zone appele SGA (System Global Area).
La SGA est un ensemble de buffers qui contiennent des donnes utilisateurs et des donnes systme.
La SGA est compose essentiellement de trois types de buffers :
g les buffers DATABASE,
g le buffer REDO LOG,
g la zone de partage des ordres SQL.
les buffers DATABASE
Ils constituent le reflet en mmoire des blocs des fichiers de donnes.
Ils contiennent :
des blocs de donnes et des blocs dindex
des blocs concernant les rollbacks segments
des blocs utiliss pour la gestion du systme

Le buffer REDO LOG
Ils constituent le reflet en mmoire des blocs des fichiers REDO LOG.
Ils contiennent :
toutes les donnes avant leur mise jour
toutes les modifications effectues sur ces donnes
la trace de toutes les transactions valides ou non encore valides

La zone de partage des ordres SQL
Elle contient le texte des ordres SQL ncessaires lanalyse syntaxique et smantique.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 22/131
Reproduction interdite
Elle contient aussi les informations du dictionnaire utiles au parsing dune requte SQL.
Les process
Il existe 2 types de process ORACLE :
g les process USER,
g les process du noyau activs automatiquement par lappel dautres process :
les process SERVER
les BACKGROUND process

Les process USER
Ils sont crs pour excuter le code dune application ou dun outil ORACLE.
Une session utilisateur est une connexion la base de donnes par lintermdiaire dun PROCESS
USER.
Exemple : Lorsquun utilisateur se connecte travers SQL*Plus, il doit
fournir un user et un mot de passe. Une session est alors ouverte.

Les process SERVER
Ils sont crs par le noyau pour prendre en charge les demandes des process USER.
Ils sont responsables de la communication entre la SGA et le process USER.
Rles :
analyse et excute les ordres SQL,
lit les fichiers DATABASE et ramne les blocs de donnes en SGA,
retourne le rsultat au process USER,
Un process SERVER est ddi chaque process USER

Les BACKGROUND process

Le process DBWR (Database Writer) :
crit dans les fichiers DATABASE les blocs de donnes modifis de la SGA,
met jour les blocs REDO LOG en mmoire,
se dclenche soit sur un besoin de place dans la SGA, soit si un certain nombre de blocs de donnes
ont t modifis dans la SGA.

Le process LGWR (Log Writer) :
crit dans les fichiers REDO LOG le buffer Redo Log de la SGA
se dclenche soit la fin dune transaction (COMMIT ou ROLLBACK), soit si ORACLE a besoin de
place dans la SGA.

Le process PMON (Process Monitor) :
intervient lorsquun processus utilisateur prsente une anomalie ou sest anormalement termin
annule les transactions non valides
libre les ressources acquises par le processus
supprime le processus concern de la liste des processus actifs de linstance.

Le process SMON (System Monitor) :
rtablit la cohrence de la base aprs un incident en assurant la reprise chaud , cest dire la
restauration de la base de donnes son dmarrage.
libre les ressources utilises par le systme
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 23/131
Reproduction interdite
applique le contenu du dernier fichier Redo Log si la base sest arrte anormalement.
La notion dinstance
A chaque dmarrage dune base de donnes, une SGA est alloue et un ensemble de BACKGROUND
PROCESS est dmarr.
La combinaison SGA + BACKGROUND PROCESS est appele : instance .
Reprsentation :
PMON SMON
SYSTEM GLOBAL AREA
ZONE DE
PARTAGE DES
ORDRES SQL
BUFFER
REDO LOG
BUFFER CACHE
DE LA BASE DE
DONNEES
DBWR LGWR
ARCH
INSTANCE
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 24/131
Reproduction interdite
Le Dictionnaire de Donnes
Cest un ensemble de table systmes et de vues qui permettent de consulter les informations relatives
aux diffrents objets de la base de donnes.
Il contient en effet des informations sur la structure logique et physique de la base.
Seuls les ordres du langage de dfinition de donnes (LDD) des utilisateurs peuvent le mettre jour.
Les ordres SELECT permettent de le consulter.
Il est utilis par
Les administrateurs de la base
les utilisateurs
les applications
le noyau ORACLE.
Les vues sont rparties en 4 classes :
USER : informations sur tous les objets dont lutilisateur connect est propritaire
(ex : USER_INDEX, USER_TAB_COLUMN,...)
Ces vues sont accessibles pour tout utilisateur de la base de donnes.
ALL : informations sur tous les objets accessibles par lutilisateur connect
(ex : ALL_TABLES, ALL_VIEWS,...)
Ces vues sont galement accessibles pour tout utilisateur de la base de donnes.
DBA : informations sur tous les objets de la base
(ex : DBA_TABLESPACES, DBA_EXTENTS,...)
Ces vues sont utilisables uniquement par les utilisateurs ayant le privilge SELECT_ANY_TABLE, soit les
administrateurs de la base de donnes gnralement.
V$ : vues relatives au suivi des performances
Ces vues sont accessibles uniquement pour le user SYS.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 25/131
Reproduction interdite
ARCHITECTURE LOGIQUE DUNE BASE DE
DONNEES
Gnralits
Une base de donnes est un ensemble de fichiers OS permettant le stockage de donnes.
Lunit logique tablespace , permet dorganiser le stockage dans diffrents fichiers et offre une
administration plus aise de la base (performance, maintenance, scurit,...).
La structure logique et la structure physique dune base de donnes sont indpendante.
La structure logique dune base de donnes est compose des lments suivants :
des tablespaces
des segments
des extensions (extents)
des blocs
un ensemble dobjets logiques dits objets de schma
Les objets de schma constituent la structure relationnelle de la base de donnes. Ce sont les tables, les
vues, les index, les clusters, les squences, les procdures stockes, les fonctions, les packages et les
triggers. Une prsentation de ces objets a dj t faite dans le chapitre concernant les objets manipuls dans
ORACLE.
Les tablespaces, les segments et les extensions permettent de dfinir la faon dont la base de donnes
(avec ses objets de schma) est organise physiquement. Ils permettent donc deffectuer un lien entre le
niveau physique et le niveau logique de la base de donnes.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 26/131
Reproduction interdite
Prsentation conceptuelle
BASE
DE
DONNEES
TABLESPACE
TABLE
INDEX
CLUSTER
ROLLBACK SEGMENT
FICHIER OS
divise en
fait partie de
contient
fait partie de
divis en
li
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 27/131
Reproduction interdite
Structure logique et structure physique
Table A
Table B
Table C
Index 1
RS1
RS2
Tablespace
systme
Tablespace
utilisateur
Tablespace
rollback segment
Fichier 1 Fichier 2
Fichier 3
Fichier 4
* Extension 1
pour table A
* Extension 2
pour table A
* Extension 1
pour table B
.
.
.
* Extension 1
pour table C
* Extension 2
pour table C
* Index 1
* Extension 1
pour table RS1
* Extension 2
pour table RS2
Notion de TABLESPACE
Une base de donnes est compose dun ensemble dunits logiques appeles tablespaces.
Caractristiques :
g permet de regrouper un ensemble dobjets logiques (tables, index, squences,...),
g li un ou plusieurs fichiers,
g un fichier est associ un et un seul tablespace,
g un objet logique doit tre associ un et un seul tablespace,
g chaque tablespace est identifi son nom.
Une base de donnes doit avoir au moins un tablespace appel SSTEM qui contient le dictionnaire de
donnes. Les autres objets de la base doivent tre stocks dans au moins un autre tablespace afin de
permettre le contrle de la rpartition des donnes sur diffrents disques.
A un instant donn, les donnes contenues dans un tablespace peuvent tre accessibles ou non aux
utilisateurs. On parle de tablespace activ ou dsactiv . Ainsi, une partie de la base de donnes peut
tre accessible alors que le reste est rendu inaccessible pour y effectuer des oprations dadministration
(sauvegarde, restauration, modification de noms de fichiers de donnes,...). Seul le tablespace System ne peut
tre dsactiv.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 28/131
Reproduction interdite
SEGMENT, EXTENSION et BLOC
Lors de la cration dun fichier, ORACLE rserve tout lespace qui lui est associ. A lintrieur de ce
fichier, lespace disque est gr dynamiquement au fur et mesure de lutilisation de la base de donnes.
Cette gestion dynamique se fait selon trois niveaux de granularit : le segment, lextension et le bloc. Le
niveau le plus fin de granularit est le bloc. Il est compos dun certain nombre doctets. Sa taille est dfinie au
moment de la cration de la base de donnes. Il peut varier entre 2 et 4 Ko.
Lextension constitue le deuxime niveau de granularit. Cest une suite de blocs contigus allous
simultanment et utiliss pour le stockage dun type spcifique de donnes.
Le troisime niveau de granularit est le segment. Il correspond un ensemble dextensions alloues
une structure logique.
Les principaux segments dune base sont :
les segments de donnes crs chaque fois quune table ou un cluster sont crs.
les segments dindex permettant loptimiseur dacclrer les recherches.
les rollbacks segments utiliss pour annuler des transactions et la lecture cohrente de la base.
Il faut au moins utiliser 2 rollbacks segments :
Le rollback segment System utilis pour les transactions portant sur les donnes du dictionnaire.
Un second rollback segment doit exister pour les transactions portant sur des donnes utilisateurs.
Il est ncessaire de crer plusieurs ROLLBACK SEGMENT en fonction du dbit transactionnel.
SEGMENT 1
Extension 1 Extension 2
Blocs
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 29/131
Reproduction interdite
ARCHITECTURE FONCTIONNELLE DORACLE
Introduction
Loffre produits dORACLE est compose dun SGBD et dun ensemble doutils utilisables tout au long du
cycle de vie dun logiciel.
Cette offre est compose des lments suivants :
Le noyau et ses couches de base : il sagit du noyau qui assure les fonctions de base dun SGBD,
dun dictionnaire de donnes reprsentant dune faon structure lensemble des objets grs par ORACLE,
dune couche SQL constituant le seul moyen daccder aux donnes et enfin dune couche PL/SQL
constituant une extension procdurale du langage SQL. Tous les autres outils sarticulent autour de ces
couches de bases.
Une mthode et un ensemble doutils de gnie logiciel permettant la conception et la gnration
dapplications. Ces outils sont utilisables depuis la phase de schma directeur jusquau maquettage et
gnration dapplications.
Un ensemble doutils de dveloppement dapplications : ce sont des outils permettant le
dveloppement dapplications construites autour du SGBD. La diversit de ces outils permet de rpondre aux
besoins les plus frquents de dveloppement.
Un ensemble doutils daide la dcision destins aux dcideurs et aux utilisateurs nophytes.
Un ensemble doutils et utilitaires destins aux administrateurs de base de donnes.
Une architecture et un ensemble doutils permettant lutilisation dORACLE dans un environnement
rseau. Ils permettent l'accs une base de donnes depuis des stations clientes, la rpartition de donnes
entre diffrentes bases ORACLE et laccs des bases de donnes non ORACLE.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 30/131
Reproduction interdite
Architecture fonctionnelle
Reprsentation
La figure suivante illustre parfaitement larchitecture fonctionnelle dORACLE.
PRO*
Outils de dveloppement dapplications
SQL*Plus SQL*Forms SQL*ReportWriter SQL*Menu
Outils de communication
SQL*Net SQL*Connect
Gnie Logiciel
CASE*Dictionary
CASE*Designer
CASE*Generator
Utilitaires
SQL*DBA SQL*Loader IMP/EXP
Outils daide la dcision
ORA 1-2-3 SQL*QMX Easy*SQL SQL*Calc Oracle*Mail
PL/SQL
SQL
Dictionnaire
de donnes
Noyau
Les couches de base
Les couches de base dORACLE sont composes :
dun noyau,
dun dictionnaire de donnes,
dune couche SQL,
dune couche PL/SQL
Le noyau
Le noyau constitue la premire couche de base. Il permet la communication avec la base de donnes et la
connexion dautres noyaux dans le cas de bases de donnes rparties. En plus, des fonctions classiques
dun SGBD que nous avons prsent dans la section prcdente (intgrit et cohrence des donnes,
confidentialit des donnes, sauvegarde et restauration des donnes, gestion des accs concurrents), le noyau
assure les fonctions suivantes :
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 31/131
Reproduction interdite
Optimisation de lexcution des requtes : le noyau comporte un optimiseur de requte SQL.
Lorsquune requte est soumise au noyau, elle est analyse, optimise, puis excute.

Gestion des acclrateurs : le noyau utilise 3 types dacclrateurs pour amliorer les performances
daccs aux donnes : les index, les clusters et les hash cluster.
* Associ une table, un index permet un accs direct aux lignes.
* Le deuxime type dacclrateur est le regroupement, appel communment clusters. Il permet de
regrouper les lignes de deux tables ayant la mme valeur sur une cl commune. Il est applicable aux tables
ayant des donnes communes et/ou frquemment accdes ensemble.
* Le Hash Cluster est une nouvelle mthode daccs rapide une table base sur le hashage. Elle offre
un accs plus rapide qu travers les index.

Stockage physique des donnes : le noyau utilise les possibilits du systme dexploitation hte pour
reprsenter et stocker les donnes de la base sous forme de fichiers. Le contenu de ces fichiers est grs par
le noyau.
Le dictionnaire de donnes
Le dictionnaire de donnes dcrit dune manire dynamique la base de donnes. Son contenu reflte
limage de la base de donnes un instant donne. Il permet ainsi de dcrire en particulier :
Les objets de la base (tables, colonnes, vues, index, synonymes, clusters, squences,...).
Les utilisateurs accdant Oracle avec leurs privilges et les droits quils ont sur les diffrents objets.
Les informations relatives lactivit de la base (connexion, ressources utilises, verrouillage,...).
De ce fait, le contenu du dictionnaire constitue un ensemble dinformations qui volue avec lutilisation de
la base de donnes. Ainsi, toute opration qui affecte la structure de la base de donnes provoque
automatiquement une mise jour du dictionnaire.
La principale consquence de la description de tous les objets grs par Oracle dans un dictionnaire
centralis est la possibilit de manipulation intgre laide dun mme langage, SQL en loccurrence, aussi
bien des donnes que de leurs structures.
La couche SQL
Cette troisime couche de base joue le rle dinterface entre le noyau et les diffrents outils dOracle.
Ainsi, tout accs la base de donnes est exprim en langage SQL.
Le rle de cette couche est dinterprter les commandes SQL, de faire une vrification syntaxique et
smantique, de les dcomposer en oprations lmentaires puis de les soumettre au noyau pour excution. Le
rsultat est ensuite rcupr et transmis lapplication ou loutil ayant soumis la demande.
Les commandes SQL peuvent tre classes en deux catgories. Un premier ensemble de commandes
constitue le langage de dfinition de donnes (LDD) permettant la cration, la modification et la suppression de
structures de donnes (tables, vues, index,...). La seconde famille de commandes, qui constitue le langage de
manipulation de donnes (LMD) permet la consultation, linsertion, la modification et la suppression des
donnes dans la base.
Lutilisation des commandes du LDD et LMD permet dassurer une volution permanente aussi bien du
contenu (les donnes) que des structures (les objets).
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 32/131
Reproduction interdite
La couche PL/SQL
Cette couche constitue une extension de la couche SQL puisque le langage PL/SQL est une extension
procdurale du langage SQL permettant dutiliser les possibilits des langages informatiques de troisime et
quatrime gnration telles que les structures de contrle (traitements conditionnels et diffrentes formes
ditrations), lutilisation de variables et les traitements derreurs.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 33/131
Reproduction interdite
Les outils de gnie logiciel
Oracle propose une gamme complte de produits de gnie logiciel permettant dautomatiser et de suivre
toutes les tapes du cycle de vie dun systme dinformation depuis la conception jusqu la gnration
dapplications. Cette gamme est connue sous le nom gnrique CASE (Computer Aided Systems
Engeneering).
La famille doutils CASE sarticule autour dune mthode et de trois outils :
CASE*Dictionary
CASE*Designer
CASE*Generator
La mthode CASE :
Cest une mthode structure destine guider les intervenants sur un projet informatique tout au long du
cycle de vie du systme dinformation. Elle est base sur une approche ascendante permettant de dfinir les
besoins des utilisateurs et de concevoir des nouveaux systmes.
La mthode CASE est articule autour de sept phases :
Etude pralable
Conception gnrale
Conception dtaille
Ralisation
Documentation utilisateur
Mise en oeuvre
Production.
Les outils :
1. CASE*DICTIONARY
Cest un mtadictionnaire conceptuel permettant denregistrer dune faon centralise et
accessible tous les acteurs dun projet lensemble des informations et des besoins des utilisateurs ainsi que
les choix de conception et les solutions retenues. On y trouve : les entits et les associations entre elles, les
tables, les index, les fonctions, les programmes, les units de traitements,...
Ce dictionnaire est gr par une base de donnes Oracle et accd via SQL*Forms et SQL*Menu.
Fonctions :
* contrle sur la cohrence des donnes et des traitements
* production dune documentation sur les diffrents composants du systme dinformation pendant les
diffrentes phases du projet.
* gnrer automatiquement un schma de base de donnes Oracle puis de la
crer.


2. CASE*DESIGNER
Cest une interface graphique permettant une meilleure utilisation de Case*Dictionary. En effet, il
permet deffectuer graphiquement lensemble des oprations possibles sur le dictionnaire.

3. CASE*GENERATOR
Il permet de gnrer des applications SQL*Forms partir des spcifications stockes dans
CASE*Dictionary, donc un gain important de temps de dveloppement.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 34/131
Reproduction interdite
Reprsentation :
Etude
Pralable
Conception
Gnrale
Conception
Dtaille
Ralisation
Documentation
utilisateur
Mise en
oeuvre
Production
Outils de dveloppement dapplications
Les outils de dveloppement dapplications constituent une composante principale de loffre Oracle. Cest
un ensemble doutils de quatrime gnration permettant de couvrir les besoins des dveloppeurs tout en
garantissant une haute productivit.
Loffre Oracle en matire doutils de dveloppement dapplications est compose des 5 outils suivants :
SQL*Plus : une interface intractive SQL
SQL*Forms : un gnrateur dapplications base de grilles dcrans
SQL*ReportWriter : un gnrateur dtats
SQL*Menu : un intgrateur dapplications
Pro*xxx: des prcompilateurs
Outils daide la dcision
Oracle dispose galement dun ensemble doutils bureautiques et daide la dcision :
Easy*SQL : outil destin aux utilisateurs nophytes
SQL*QMX : outil ddition dtats pour utilisateurs finals
SQL*Calc : tableur intgr Oracle
Oracle pour 1-2-3 : tableur compatible Lotus 1-2-3
Oracle*Mail : messagerie lectronique
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 35/131
Reproduction interdite
Outils dadministration
Oracle dispose dun ensemble doutils et dutilitaire dadministration de la base de donnes.
Ces outils sont :
SQL*DBA : outil de base de ladministrateur
SQL*Loader : outil de chargement de donnes partir de fichiers externes
Import/Export : outils dimportation et dexportation de donnes entre bases de donnes Oracle.
Architecture rpartie dOracle
Dans un environnement rseau, Oracle utilise un modle dit client/serveur. Un client est toute application
ou outil Oracle ncessitant laccs la base de donnes. Un serveur est une machine grant la base de
donnes.
En sappuyant sur ce modle, Oracle permet la rpartition des traitements et des donnes. Dautre part, il
ne se limite pas ses propres donnes, mais est ouvert aux donnes dautres SGBD.
La rpartition des traitements
Oracle offre la possibilit daccder une base de donnes partir dapplications installes sur des
machines distantes (clients) de celle qui gre la base de donnes (serveur). Cette architecture dite architecture
client/serveur, permet de ddier des machines aux applications et dautres aux traitements de donnes. Le
serveur est ainsi dcharg des traitements applicatifs.
La mise en place dune telle architecture est possible grce loutil de communication SQL*Net.
SQL*Net est un outil dOracle permettant la connexion dune application sexcutant sur une machine
client un noyau Oracle sexcutant sur une machine serveur. Le client envoie sa requte formate sous forme
de message vers le serveur. Ces messages sont reus par le serveur qui les dcode en requtes SQL, les
excute par le noyau Oracle et renvoie le rsultat au client.
La rpartition des donnes
Les donnes gres par Oracle peuvent tre localises sur des sites diffrents. Ds la conception dune
base de donnes, on peut dcider de localiser des fragments de donnes sur des sites diffrents. Lensemble
des donnes sur les diffrents sites constitue une base de donnes rpartie.
En plus des fonctions classiques de gestions de donnes locales, le noyau avec lextension rpartie
assure lexcution des requtes multibases. Pour lchange des donnes avec dautres noyaux Oracle, il
utilise les fonctionnalits de SQL*Net. Pour accder des donnes non Oracle, il fait appel SQL*Connect.
Ce dernier permet aussi dutiliser des outils Oracle et des fonctionnalits du langage SQL dOracle non
disponibles sur dautre SQBD.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 36/131
Reproduction interdite
Louverture dautres SGBD
Dans son architecture rpartie, Oracle ne se limite pas aux donnes gres par ses propres noyaux
situs sur des sites diffrents. Il permet, en effet, la coopration avec dautres SGBD. Ainsi, des donnes
gres par DB2 ou SQL/DS peuvent tre accdes partir dapplications Oracle.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 37/131
Reproduction interdite
Apprentissage du langage de requtes
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 38/131
Reproduction interdite
Prsentation des tables
Tous les exemples traits dans le cours vont sappuyer sur les tables suivantes VIN, CLIENT,
COMMANDE et LIGNE_COMMANDE.
No_Commande = No_Commande
Id_Vin = Id_Vin
Id_Client = Id_Client
Id_Viticulteur = Id_Viticulteur
Client
Id_Client NUMBER(8)
Nom VARCHAR2(25)
Prenom VARCHAR2(25)
Adresse_1 VARCHAR2(25)
Adresse_2 VARCHAR2(25)
Code_Postal VARCHAR2(5)
Bureau_Distributeur VARCHAR2(20)
EMail VARCHAR2(50)
Type_Client NUMBER(1)
Viticulteur
Id_Viticulteur NUMBER(8)
Nom VARCHAR2(25)
Prenom VARCHAR2(25)
Adresse_1 VARCHAR2(25)
Adresse_2 VARCHAR2(25)
Code_Postal VARCHAR2(5)
Bureau_Distributeur VARCHAR2(20)
EMail VARCHAR2(50)
Vin
Id_Vin NUMBER(8)
Id_Viticulteur NUMBER(8)
Nom VARCHAR2(25)
Millesime VARCHAR2(4)
Cru VARCHAR2(20)
Region VARCHAR2(15)
Couleur NUMBER(1)
Cepage VARCHAR2(20)
Prix_Achat NUMBER(8,2)
Commande
No_Commande NUMBER(8)
Id_Client NUMBER(8)
Date DATE
Cdts_Paiement NUMBER(1)
Mode_Paiement NUMBER(1)
Ligne_Commande
No_Commande NUMBER(8)
No_Ligne NUMBER(8)
Id_Vin NUMBER(8)
Quantite INTEGER
Modle physique de donnes
Projet : TP FORMS 4 5 et REPORT 4 5
Modle: TP Vins
Auteur : Version: 22/09/98
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 39/131
Reproduction interdite
En supposant que ces tables aient t cres pralablement, on peut retrouver leur structure laide de la
commande SQL suivante :
DESC nom_table ; (cf. ANNEXE 1).
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 40/131
Reproduction interdite
Consultation des tables
Ordre SELECT simple
La consultation simple du contenu des tables seffectue par lintermdiaire de la commande SELECT.
Recherche de la totalit du contenu de la table
La commande SELECT * permet de consulter la totalit des colonnes de la table concerne.
SELECT * FROM nom_table; (cf. ANNEXE 2)
Restriction sur le nombre de colonnes
La commande SELECT peut aussi sutiliser en prcisant les noms des colonnes de la table que lon
souhaite visualiser.
SELECT nom_colonne1, nom_colonne2, ...
FROM nom_table;
Exemple :
SQL> SELECT id_vin, millesime
2 FROM vin;
ID_VIN MILL
--------- ----
1 1975
10 1976
9 1971
8 1971
7 1971
2 1971
6 1976
5 1980
3 1980
4 1976
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 41/131
Reproduction interdite
SQL> SELECT millesime
2 FROM vin;
MILL
----
1975
1976
1971
1971
1971
1971
1976
1980
1980
1976
Restriction sur les doublons
Le mot cl DISTINCT ajout la commande SELECT permet de supprimer des lignes rsultantes toutes
les donnes en double.
SELECT DISTINCT nom_colonne1, nom_colonne2, ...
FROM nom_table;
Exemple :
SQL> SELECT DISTINCT millesime FROM vin ;
MILL
1971
1975
1976
1980
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 42/131
Reproduction interdite
Consultation avec qualification (ou restriction)
La clause WHERE permet de slectionner uniquement une partie des lignes de la table, en prcisant des
critres de filtre.
SELECT colonne1, colonne2,
FROM nom_table
WHERE condition;
Conditions de comparaison
Comparaison sur une valeur
La condition de filtre des lignes peut tre une comparaison entre le contenu dune colonne et une valeur
prcise.
Les diffrents oprateurs de comparaison possibles sont les suivants :
Egal = ou IS NULL
Diffrent de <> ou != ou IS NOT NULL
Suprieur > ou >=
Infrieur < ou <=
WHERE nom_colonne oprateur_comparaison valeur
Exemple 1: On veut afficher les numros, les noms et les millsimes des vins
du millsime 1980.
SQL> SELECT * FROM vin WHERE millesime=1980;
ID_VIN ID_VITICULTEUR NOM MILL CRU REGION
COULEUR CEPAG PRIX_ACHAT
--------- -------------- ------------------------- ---- --- ------ -------
-- ----- ----------
5 8 Julienas 1980
3 9 Chablis 1980
Exemple 2 : On veut afficher les noms des vins de millsime postrieur
1978
SQL> SELECT nom FROM vin WHERE millesime >1978;
NOM
-------------------------
Julienas
Chablis
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 43/131
Reproduction interdite
Comparaison sur un ensemble de valeurs
La condition de filtre des lignes peut tre une comparaison entre le contenu dune colonne et une liste ou
une plage de valeurs.
Ensemble list de valeurs : IN
Entre deux bornes (incluses) : BETWEEN
Sur une chane de caractre : LIKE
nom_colonne [NOT]
IN valeur valeur
BETWEEN valeur and valeur
LIKE X
( , ,. ..)
' _ _ _ %'
1 2
1 2

Loprateur LIKE permet de dterminer si des donnes correspondent une chane de caractres
contenant des caractres jokers.
% remplace un nombre illimit de caractres ou zro caractre.
_ correspond un caractre unique
Exemple 1: Recherche des noms des vins de millsime 1971 ou 1979
SQL> SELECT nom FROM vin WHERE millesime IN (1971,1979);
NOM
-------------------------
Riesling
Muscadet
Cahors
Mercurey
Exemple 2: Recherche des noms des vins dont le nom commence par un C.
SQL> SELECT nom FROM vin WHERE nom LIKE 'C%';
NOM
-------------------------
Cahors
Chablis
G G Attention : il faut faire une distinction entre les majuscules et les minuscules.
Comparaison selon plusieurs critres
Pour additionner les critres de comparaison, on utilise la syntaxe suivante :
SELECT [DISTINCT] liste_des_colonnes
FROM nom_table
WHERE condition1
AND | OR condition2
AND | OR condition3 ;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 44/131
Reproduction interdite
Exemple 1: On veut afficher les noms des vins dont le millsime est
postrieur 1978 et dont le numro de vin est suprieur 5
SQL> SELECT nom FROM vin
2 WHERE millesime > 1978
3 AND id_vin < 5;
NOM
-------------------------
Chablis
Exemple 2: On veut afficher les noms des VIN dont le millsime est
postrieur 1978 ou antrieur 1972;
SQL> SELECT nom FROM vin
2 WHERE millesime>1978
3 OR millesime <1972;
NOM
-------------------------
Riesling
Muscadet
Cahors
Mercurey
Julienas
Chablis
Conditions de jointure
La jointure est une restriction du produit cartsien de deux tables. Le critre de restriction compare des
attributs appartenant respectivement chacune des deux tables.
SELECT liste_colonnes
FROM table1, table2
WHERE condition entre table1 et table2;
Jointure naturelle
Dans le cas d'une jointure naturelle, le critre de restriction de la jointure est l'galit des attributs
communs aux deux tables.
Dans la relation rsultat, on garde une seule fois les attributs identiques.
Dans la jointure naturelle, on veut que chaque lment de la colonne de jointure sur la table A existe dans
la colonne de jointure de la table B et inversement.
FROM nom_table_a a, nom_table_b b
WHERE a.nom1 = b.nom1;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 45/131
Reproduction interdite
Exemple : On veut afficher les noms et les dates de commande des clients.
SQL> SELECT nom, date_commande
2 FROM client a, commande b
3 WHERE a.id_client = b.id_client;
NOM DATE_COM
------------------------- --------
KIROULE 01/05/98
SREGO 02/04/98
MADEK 01/10/97
MARECHAL 14/02/96
GRemarque : Lorsque lon travaille sur plusieurs tables, on fait prcder chaque nom de colonne par le
nom de sa table (sauf sil ne peut pas y avoir ambigut), ou pour simplifier on dfinit un alias (comme
dans lexemple dillustration) que lon peut utiliser en guise de nom de table.
Jointure externe
Dans la jointure externe, on veut que chaque lment de la colonne de jointure sur la table B existe dans
la colonne de jointure de la table A mais quil existe des lments de la colonne de jointure de la table A
absents de la table B.
FROM a,b
WHERE a.nom1 = b.nom1 (+);
Exemple : On veut afficher tous les noms des clients, et les dates de
commande des clients.
SQL> SELECT nom, date_commande
2 FROM client a, commande b
3 WHERE a.id_client = b.id_client(+);
NOM DATE_COM
------------------------- --------
DUMOLET
MADEK 01/10/97
AURELE
DURAND
KIROULE 01/05/98
SREGO 02/04/98
KIESSE
MARECHAL 14/02/96
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 46/131
Reproduction interdite
Conditions de sous requte
Permet de comparer une colonne ou expression au rsultat dune requte
WHERE expr [NOT] IN requte_select
WHERE [NOT] EXISTS requte_select
WHERE expr { <, >, ... } { ALL | ANY | SOME } requte_select
Exemple 1: On veut afficher le nom de lacheteur ayant command le plus de
vin en une seule fois (cest celui qui a achet plus que nimporte lequel
des autres)
SQL> SELECT nom, quantite
2 FROM client a, ligne_commande b, commande c
3 WHERE a.id_client=c.id_client
4 AND b.no_commande=c.no_commande
5 AND quantite >= ALL(SELECT quantite FROM ligne_commande);
NOM QUANTITE
------------------------- ---------
MARECHAL 18
Exemple 2 : Recherche des noms des clients nayant rien command.
SQL> SELECT nom
2 FROM client
3 WHERE id_client NOT IN (SELECT id_client FROM commande);
NOM
-------------------------
DUMOLET
AURELE
DURAND
KIESSE
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 47/131
Reproduction interdite
Tri du rsultat
On peut dfinir un ordre de tri sur le rsultat souhait
ORDER BY nom_colonne {ASC|DESC} ;
Exemple : Recherche de toutes les commandes tries par numro de commande
dcroissant.
SQL> SELECT * FROM commande
2 ORDER BY no_commande DESC;
NO_COMMANDE ID_CLIENT DATE_COM CDTS_PAIEMENT MODE_PAIEMENT
----------- --------- -------- ------------- -------------
4 30 14/02/96
3 10 01/10/97
2 35 02/04/98
1 15 01/05/98
GRemarques :
- le tri par dfaut est le tri ascendant (sans DESC).
- le nom de la colonne peut tre remplac par son numro dordre dapparition dans le SELECT
Exemple : Recherche de toutes les commandes tries par numro dacheteur
croissant et quantits achetes dcroissantes.
SELECT id_client, quantite
FROM commande, ligne_commande
WHERE commande.no_commande=ligne_commande.no_commande
ORDER BY 1,2 DESC;
Groupement des donnes
Fonctions dagrgat
Elles permettent de renvoyer une valeur calcule sur toutes les lignes ou un ensemble de lignes.
COUNT(*) Nombre de lignes slectionnes
COUNT( nom_colonne) Nombre de valeurs non nulles dans une colonne
SUM (nom_colonne) Somme des valeurs dune colonne
AVG (nom_colonne) Moyenne des valeurs dune colonne
MAX(nom_colonne) Valeur maximale dune colonne
MIN(nom_colonne) Valeur minimale dune colonne
GROUP BY
On peut grouper les lignes ayant des valeurs communes, et appliquer les fonctions dagrgat.
GROUP BY nom_colonne ;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 48/131
Reproduction interdite
Exemple : On veut afficher pour chaque acheteur, le numro dacheteur et les
quantits totales achetes jusqu prsent.
SQL> SELECT id_client, SUM(quantite)
2 FROM ligne_commande, commande
3 WHERE ligne_commande.no_commande=commande.no_commande
4 GROUP BY id_client;
ID_CLIENT SUM(QUANTITE)
--------- -------------
10 5
15 19
30 18
35 30
G Remarques :
- On peut renommer une expression au moment de sa dfinition et travailler ensuite avec le nouveau
nom.
- Le group by doit porter sur l ensemble des colonnes du SELECT.
HAVING
Linstruction HAVING permet de restreindre la slection selon un critre portant sur la fonction dagrgat.
HAVING condition ;
Exemple : On veut afficher les numros de client et les quantits totales
achetes jusqu prsent, pour tous les clients dont les quantits achetes
sont suprieures 20.
SQL> SELECT id_client, SUM(quantite)
2 FROM ligne_commande, commande
3 WHERE ligne_commande.no_commande=commande.no_commande
4 GROUP BY id_client
5 HAVING SUM(quantite)>=20;
ID_CLIENT SUM(QUANTITE)
--------- -------------
35 30
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 49/131
Reproduction interdite
Oprateurs ensemblistes
UNION
Loprateur dunion permet la fusion des donnes provenant de plusieurs requtes de slection diffrentes
mais constitues de la mme liste de colonnes.
Requte_select1
UNION
Requte_select2;
Exemple : Recherche des vins pour augmentation du prix dachat de 15% pour
les vins de millsime antrieur 1972 et de 10% pour les autres vins
tris par ordre croissant du millsime.
SQL> SELECT id_vin, millesime, prix_achat, prix_achat * 1.15 PRIX
2 FROM vin
3 WHERE millesime < 1972
4 UNION
3 SELECT id_vin, millesime, prix_achat, prix_achat * 1.1 PRIX
4 FROM vin
5 WHERE millesime >= 1972
6 ORDER BY 2;
ID_VIN MILL PRIX_ACHAT PRIX
--------- ---- ---------- ---------
9 1971 105 120,75
13 1973 20 22
2 1974 230 253
4 1976 310 341
10 1976 150 165
6 1976 190 209
3 1980 315 346,5
INTERSECTION
Lintersection permet dobtenir les lignes identiques de plusieurs requtes de slection diffrentes. Les
requtes doivent tre constitues de la mme liste de colonnes.
Requte_select1
INTERSECT
Requte_select2;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 50/131
Reproduction interdite
Exemple : Recherche de tous les clients dune ville qui ont achet du vin de
Graves
SQL> SELECT DISTINCT id_client FROM client
2 WHERE code_postal = 17000
3 INTERSECT
4 SELECT DISTINCT id_client
5 FROM commande a, ligne_commande b, vin c
6 WHERE a.no_commande = b.no_commande
7 AND b.id_vin = c.id_vin
8 AND LTRIM(UPPER(c.nom)) = GRAVES
4 ORDER BY 1;
ID_CLIENT
---------
35
DIFFERENCE
La diffrence permet dobtenir les lignes dune requte de slection qui sont diffrentes de celles de la
deuxime requte de slection.
Requte_select1
MINUS
Requte_select2
Exemple : Recherche de tous les clients dune ville qui nont pas achet de
Cahors.
SQL> SELECT DISTINCT id_client FROM client
9 WHERE code_postal = 17000
10 MINUS
11 SELECT DISTINCT id_client
12 FROM commande a, ligne_commande b, vin c
13 WHERE a.no_commande = b.no_commande
14 AND b.id_vin = c.id_vin
15 AND LTRIM(UPPER(c.nom)) = CAHORS
4 ORDER BY 1;
ID_CLIENT
---------
35
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 51/131
Reproduction interdite
Mise jour des tables
Les trois ordres de mise a jour sont linsertion, la suppression et la modification.
Commit / Rollback
Aprs lexcution des ordres de mise jour, il est possible dannuler la mise jour en appelant la
commande ROLLBACK ou de valider la mise jour par la commande COMMIT.
La commande ROLLBACK annule toutes les modifications depuis la connexion ou la dernire validation
COMMIT/ROLLBACK.
La commande COMMITpermet de sauvegarder toutes les modifications faites sur les tables dans la base
de donnes.
Insertion
La commande INSERT ajoute une ou plusieurs lignes dans une table existante.
Insertion directe
Les valeurs des colonnes sont prcises dans la commande INSERT.
INSERT INTO nom_table
[( colonne1, colonne 2, ) ]
VALUES
( valeur1, valeur2, ) ;
Lindication de la liste des colonnes est facultative. Lorsquelle nest pas prcise, la liste des valeurs doit
correspondre lordre de dclaration des colonnes lors de la cration de la table.
Exemple : On veut insrer un vin dans la table des vins.
INSERT INTO vin (id_vin,Id_Viticulteur,nom)
VALUES (11, 1,'Bourgogne Aligot');
INSERT INTO vin (id_vin,Id_Viticulteur,millesime,nom)
VALUES (12, 2,1978,'Chteau Neuf du Pape');
INSERT INTO vin
VALUES (13, 4,'Chteau des Merveilles',1975,'Ctes du
Rhne','Rhne',2,null,20.00);
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 52/131
Reproduction interdite
Insertion du rsultat dune requte
La liste de valeurs insrer est le rsultat dune requte SELECT. On peut ainsi insrer plusieurs lignes
en une seule commande.
INSERT INTO nom_table
[( colonne1, colonne 2, ) ]
SELECT colonne1, colonne2,
FROM liste_tables
WHERE condition;
Exemple : Dans le cadre dune campagne promotionnelle, une bouteille de
vin gratuite est envoye tous les clients de dpartement.
INSERT INTO commande
( id_client, date_commande, cdts_paiement, mode_paiement )
SELECT id_client, 19990701, NULL, NULL
FROM client
WHERE code_postal LIKE 75%;
Modification
La commande UPDATE modifie tout ou partie dune ligne existante dune seule table.
La clause WHERE restreint la mise jour aux lignes slectionnes.
Il est possible de mettre jour plusieurs colonnes avec une seule instruction UPDATE.
UPDATE nom_table
SET colonne1 = valeur1, colonne2 =valeur2,
WHERE condition;
Mise jour directe
On indique directement dans la requte la nouvelle valeur ajouter.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 53/131
Reproduction interdite
Sur un enregistrement de la table
Exemple : On veut modifier le prix dachat du muscadet
UPDATE vin
SET prix_achat = 152
WHERE UPPER(nom) = MUSCADET;
Sur les enregistrements de la table
Exemple : Le prix dachat des vins doit dsormais tre exprim en Euro
SQL> UPDATE vin
2 SET prix_achat = prix_achat / 6.55957 ;
Mise jour par requte
La nouvelle valeur est le rsultat dune requte de slection.
Exemple : Le prix dachat des vins de millsime 1979 est homognis au prix
le plus bas.
SQL> UPDATE vin
2 SET prix_achat = (SELECT MIN(prix_achat)
3 FROM vin
4 WHERE millesime = 1979)
4 WHERE millesime = 1979;
Mise jour combine
On combine des valeurs fixes et le rsultat dune requte
Exemple : On veut remplacer le nom du vin numro 8 de la table VIN par
MUSCADET et lui attribuer le plus petit millsime de cette table.
SQL> UPDATE vin
2 SET nom = 'MUSCADET',
3 millesime = (SELECT MIN(millesime)
4 FROM vin)
5 WHERE Id_vin = 8;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 54/131
Reproduction interdite
Suppression
La commande DELETE permet de supprimer une ou plusieurs lignes dune mme table.
La clause WHERE restreint la suppression aux lignes slectionnes.
DELETE FROM nom_table
WHERE condition;
Exemple 1: Suppression de tous les vins de la table VIN dont le millsime
est 1975
SQL> DELETE FROM vin
2 WHERE millesime = 1975;
Exemple 2: Suppression de tous les enregistrements de la table VIN
SQL> DELETE FROM vin;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 55/131
Reproduction interdite
Les fonctions SQL
Toute une srie de fonctions SQL est votre disposition. Ces fonctions peuvent tre exprimes dans le
SELECT ou dans le WHERE. Vous pouvez vous rfrer laide mmoire SQL dOracle pour connatre
leur syntaxe exacte.
La liste de fonctions prsente nest pas exhaustive.
Fonctions de date
SYSDATE Date et Heure courante du systme dexploitation
MONTHS_BETWEEN (d1, d2) Nombre de mois couls entre 2 dates
ADD_MONTHS ( d, n ) Retourne la date correspondant la date d plus n mois.
LAST_DAY(d) Retourne le dernier jour du mois de la date d
NEXT_DAY (d, char) Retourne le prochain jour de la semaine spcifi dans char qui soit
postrieur la date d.
Exemple: Recherche le nombre de mois couls entre la dernire commande de
chaque acheteur et maintenant (31/12/98).
SQL> SELECT MONTHS_BETWEEN(SYSDATE,MAX(date_commande)) NB_MOIS
2 FROM commande
3 GROUP BY id_client;
NB_MOIS
---------
11,950474
4,9504738
31,531119
5,9182157
Fonctions numriques
Toutes ces fonctions sont utilises dans un contexte mathmatique.
ABS (n) Retourne la valeur absolue de n
CEIL (n) Retourne le plus petit entier suprieur ou gal n
FLOOR (n) Retourne le plus grand entier infrieur ou gal n
TRUNC (n[, m]) Retourne le nombre n tronqu m dcimales.
ROUND (n[, m]) Retourne le nombre n arrondi m dcimales.
MOD (m,n) Retourne le reste de la division de m par n
SIGN(n) Retourne le signe du nombre n
COS, COSH, EXP, LN,
LOG, SIN, SINH, SQRT, TAN,
TANH, POWER
Fonctions trigonomtriques, exponentielles, logarithmiques et racine
carr
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 56/131
Reproduction interdite
Exemple: Recherche le nombre de mois couls entre la dernire commande de
chaque acheteur et maintenant (31/12/98); on arrondira le rsultat au
premier entier suprieur.
SQL> SELECT CEIL(MONTHS_BETWEEN(SYSDATE,MAX(date_commande))) NB_MOIS
2 FROM commande
3 GROUP BY id_client;
NB_MOIS
---------
3
1
6
5
14
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 57/131
Reproduction interdite
Fonctions sur chanes de caractres
Ces fonctions constituent une liste non exhaustive de fonctions de manipulation de chanes de
caractres.
LENGTH (char) Retourne le nombre de caractres de la chane
CONCAT (char1, char2) Retourne la concatnation des chanes char1 et char2
SUBSTR ( char, n, l) Retourne la sous-chane de char commenant en position n et de
longueur l
UPPER (char), LOWER(char) Retourne la chane en majuscule ou minuscule
LTRIM, RTRIM Supprime des caractres droite ou gauche
LPAD, RPAD Aligne une chane droite ou gauche avec un caractre
REPLACE (chane dorigine,
chane cherche, chane de
remplacement )
Remplace la chane cherche par la chane de remplacement dans la
chane dorigine.

Exemple : Recherche du nom du vin numro 10, en affichant la premire lettre


en majuscule
SQL> SELECT DISTINCT UPPER(SUBSTR(nom,1,1))|| SUBSTR(nom,2,30)
2 FROM vin
3 WHERE id_vin=10 ;
SU
--
Muscadet
Exemple : Affichage des diffrents millsimes sans le sicle (ex 1979 79)
SQL> SELECT DISTINCT SUBSTR(millesime,3,2)
2 FROM vin;
SU
--
75
76
79
80
71
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 58/131
Reproduction interdite
Fonctions de conversion
TO_CHAR ( a, format) Retourne a au format prcis.
TO_DATE ( a, format) Retourne la date correspondant la chane a.
NVL( expr1, expr2) Retourne expr2 si expr1 est NULL
DECODE( expr, search, result
[, search, result] ... [, default] )
Compare lexpr chacune des donnes search et retourne la donne
result en correspondance.
Exemple : Affichage de la date dachat sous forme JJ-MOIS-AAAA pour lachat
du vin numro 1 par lacheteur numro 10
SQL> SELECT TO_CHAR(date_commande,'DD-fmmonth-YYYY')
2 FROM commande
3 WHERE id_client=10
4 ;
TO_CHAR(DATE_COMMANDE,'DD-FMMONTH-YYYY')
------------------------------------------------------
01-octobre-1997
Exemple : Affichage de toutes les conditions de paiement des commandes avec
un libell explicite.
SQL> SELECT no_commande,
DECODE ( cdts_paiement, 1, 'Comptant', 2, '30 jours fin de
mois', 3, '30 jours') "Condition paiement"
FROM commande;
NO_COMMANDE Condition paiement
----------- ---------------------
1 Comptant
2
3 30 jours
4
5 30 jours fin de mois
6 Comptant
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 59/131
Reproduction interdite
MANIPULATION DE STRUCTURE
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 60/131
Reproduction interdite
Les users
Un user Oracle permet de se connecter la base de donnes, de crer des objets (tables, index, vues,
fonctions, ...), dexcuter des requtes SQL.
Cration
Il est cr par le user SYSTEM o un utilisateur ayant le rle DBA.
CREATE USER nom_user
IDENTIFIED BY password_user
DEFAULT TABLESPACE tb_user
TEMPORARY TABLESPACE tb_temp
PROFIL nom_profil.
QUOTA 10M ON tb_user;
O
nom_user est le nom de lutilisateur.
password_user est le mot de passe
tb_user est le tablespace o sont crs les objets Oracle si la clause tablespace est omise dans les
ordres de cration.
tb_temp est le tablespace de travail pour les requtes avec tri (order by).
nom_profil est un profil dfinit (sil est omis Oracle utilise le profil DEFAULT ou tous les paramtres
sont illimits)
QUOTA est lespace de stockage autoris pour stocker ces objets.
Modification
On utilise lordre de modification user pour changer ses droits (quota dcriture dun tablespace par
exemple),alors il faut tre connect system.
ALTER USER nom_user
QUOTA UNLIMITED ON TABLESPACE tb_user;
Un utilisateur peut changer sont mot de passe grce la commande alter user.
ALTER USER nom_user
IDENTIFIED BY new_password;
Il suffit dtre connect avec nom_user, Oracle ne demande pas confirmation du nouveau mot de passe, ni de
retaper lancien.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 61/131
Reproduction interdite
Les Profils
Chaque utilisateur un profil associ. Un profil permet de limiter les accs afin dviter des consommations de
ressource incontrles et anormales des utilisateurs.
Les diffrents paramtres des profils sont:
SESSIONS_PER_USER : Il limite le nombre de sessions simultanes dun mme user.
CPU_PER_SESSION : Indique le temps CPU max. pour une session (en centimes de secondes).
CPU_PER_CALL : Indique le temps CPU max. quune requte a pour sexcuter (Empche un utilisateur
de faire une requte trop longue).
CONNECT_TIME : Temps max. de dure dun session (en minutes).
IDLE_TIME : Temps limite dinactivit dune session (en minutes).
LOGICAL_READ_PER_CALL : Indique le nombre de blocs de donnes maximum par requte SQL (bloc =
4096 octets ou 2048 Octets ).
LOGICAL_READS_PER_SESSION : Indique le nombre de blocs de donnes maximum par session.
PRIVATE_SGA : Limite la taille alloue dans la SGA (valable uniquement dans les BD rparties).
COMPOSIT_LIMIT : Exprime le cot total dune session (Somme des options CPU_PER_SESSION,
CONNECT_TIME, LOGICAL_READ_PER_CALL, PRIVATE_SGA
Lorsquun paramtre est omis il est par dfaut UNLIMITED.
Exemples :
Cration
CREATE PROFIL nom_profil
LIMIT CPU_PER_CALL 3000
CONNECT TIME 20;
Modification
ALTER PROFIL nom_profil
LIMIT CPU_PER_CALL UNLIMITED;
Destruction
DROP PROFIL nom_profil;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 62/131
Reproduction interdite
Les Rles
Les rles sont un regroupement de privilges.
Oracle utilise 3 rles par dfaut :
CONNECT : pour connexion, cration objets (tables, index, vues, ...)
RESOURCE : pour excution de fonctions et procdures PL/SQL
DBA : pour voir toutes les tables systmes et grer les utilisateurs.
On peut crer des rles en incluant des privilges Oracle existant.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 63/131
Reproduction interdite
Les Grants
Les propritaires dobjets octroient (GRANT) et rvoquent (REVOKE) des droits :
- sur les commandes Select, Insert, Update et Delete excutes sur les tables qui leur appartiennent
- pour excuter les procdures stockes qui leur appartiennent
Par lintermdiaire de la commande GRANT , un utilisateur peut autoriser un autre utilisateur consulter
ou modifier ses tables.
Exemple : GRANT SELECT, UPDATE ON nom_table FOR autre_user;
Lutilisateur qui la table nom_table appartient autorise lutilisateur autre_user effectuer des requtes
SELECT ou UPDATE sur sa table.
Exemple : GRANT SELECT ON vin FOR user2;
Les diffrentes autorisations pouvant tre accordes sont :
ALTER
DELETE
EXECUTE
INDEX
INSERT
REFERENCES
SELECT
UPDATE
ALL
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 64/131
Reproduction interdite
Les Revokes.
Un utilisateur supprime les autorisations donnes un autre utilisateur.
REVOKE ALL ON NOM_TABLE FROM AUTRE_USER;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 65/131
Reproduction interdite
Les synonymes
Pour rfrencer un objet dans le cas de bases de donne rparties, il faut prciser le nom dun objet,
prcd de lutilisateur qui il appartient et ventuellement suivi du db_link s'il se situe sur une autre base
que la base courante.
Les synonymes sont utiliss pour appeler un objet Oracle par un autre nom plus simple.
Les objets Oracle pouvant avoir des synonymes sont :
- Les tables;
- Les vues;
- Les index;
- Les squences;
- Les fonctions PL/SQL;
- Les procdures stockes;
- Les packages;
- Les snapshots;
- Les synonymes.
Les synonymes peuvent tre privs (connu du user Oracle qui le cr ) ou public (connu de tous les users
oracle).
Pour crer un synonyme, il faut avoir le privilge CREATE ANY SYNONYM inclus dans le rle CONNECT.
CREATE SYNONYM nom_du_synonyme FOR nom_user.nom_table ;
Dans les requtes SQL, on utilise le nom_synonyme plutt que nom_user.nom_table.
CREATE PUBLIC SYNONYM nom_synonyme FOR nom_user.nom_table@db_link;
Pour excuter la commande prcdente, lutilisateur doit avoir le privilge CREATE PUBLIC SYNONYM.
Exemple :
CREATE SYNONYM table_VIN FOR public.VIN ;
CREATE PUBLIC SYNONYM table_VIN FOR public.VIN@db_link;
SELECT * FROM table_VIN;
Pour dtruire un synonyme : DROP SYNONYM nom_synonyme;
Pour modifier un synonyme, il faut le dtruire et le recrer.
Remarques : Pour plus de dtails se rfrer la documentation Oracle SQL REFERENCE.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 66/131
Reproduction interdite
Les index
Un index est une structure de stockage indpendante cre en plus de la table ; cest aussi un objet
distinct de la base de donnes.
La cration dun index amliore les performances en rduisant les lectures de pages ncessaires pour
retrouver les donnes.
Ils permettent dacclrer les recherches (SELECT), mais ralentissent lexcution des ordres INSERT,
UPDATE et DELETE.
Un index unique garantit que chaque ligne contient des donnes uniques dans la ou les colonnes
dfinissant la cl de lindex. Les index uniques sont utiliss pour assurer lunicit.
Un index peut concerner plusieurs colonnes dune mme table, ce sont les index composs.
Les index sont utiliss dans les interrogations (SELECT) uniquement dans les conditions de la clause
WHERE. Elles sont indpendantes des colonnes slectionnes.
A la cration dun index, Oracle trie les colonnes indexes, et les organise en un arbre quilibr
(B*TREE). Chaque feuille de larbre contient ladresse de la feuille suivante, la valeur de lindex et
ladresse de la ligne de la table o se trouve la valeur de lindex (ROWID).
Choix des colonnes indexer.
Les index uniques sont fixer ds le dbut, ils garantissent lunicit du modle de donnes. Les autres
index dpendent des requtes, des donnes de la table.
Cas o les index ne sont jamais utiliss.
Les index ne sont pas utiliss si :
- il ny a pas de clause WHERE dans les requtes.
- une fonction Oracle (NVL, SUBSTR, TO_CHAR,...) est utilise sur la colonne indexe.
- une comparaison la valeur NULL ou NOT NULL est effectue sur la colonne.
- dans certains cas de commande LIKE :
col1 LIKE %val : lindex n est pas utilis
col1 LIKE val% : lindex est utilis.
Lorsque lon a une jointure, seul un index est utilis.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 67/131
Reproduction interdite
Ordres SQL sur les index.
Pour crer un index, il faut que la table sur lequel il porte existe.
Syntaxe de la cration dun index.
Cas dun index unique.
CREATE UNIQUE INDEX nom_index ON nom_table (colonne);
Exemple : CREATE UNIQUE INDEX i_vin ON vin (id_vin) ;
Cas dun index non unique.
CREATE INDEX nom_index ON nom_table (colonne);
Exemple : CREATE INDEX i1_vin ON vin(nom) ;
Cas dun index sur plusieurs colonnes.
CREATE [UNIQUE ] INDEX nom_index ON nom_table (colonne1, colonne2,);
Exemple :
CREATE INDEX i_commande ON table_commande (no_achet,id_vin) ;
Dans le cas dun index unique multi-colonne, lunicit porte sur la valeur des deux colonnes associes.
Lors de la cration dindex (comme lors de la cration dune table), il est possible dindiquer des
paramtres concernant la rpartition physique des donnes et la volumtrie. La cration dindex est
gnralement effectue par ladministrateur de la BD.
Exemple :
CREATE INDEX index_name ON table_name (col_tab)
TABLESPACE nom_du_tablespace
STORAGE ( INITIAL taille_exent_initial M ou K
NEXT taille_extent_suivant M ou K
PCTINCREASE taille_poucentage_daccroissement
MINEXETENTS nbres_min_extent__la_creation
) ;
G Remarque : Gnralement les index ne sont pas dans le mme tablespace que les tables pour
optimiser les entres / sorties. Si loption tablespace est omise, lindex est cr dans le tablespace par dfaut
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 68/131
Reproduction interdite
de lutilisateur. Les autres paramtres dpendent du volume des donnes de la table indexe et de
loptimisation physique.
Modification dun index
La modification des index porte uniquement sur certains paramtres physiques de stockage.
La commande suivante est alors utilise :
ALTER INDEX nom_index
STORAGE ( paramtres modifis );
Destruction dun index
La destruction dindex seffectue par lordre SQL suivant :
DROP INDEX nom_index;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 69/131
Reproduction interdite
Utilisation des procdures stockes
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 70/131
Reproduction interdite
Gnralits
PL/SQL
Langage procdural d ORACLE, extension du langage SQL.
Intgration des instructions SQL
Instruction de consultation : SELECT
Instructions de mises jour : INSERT, UPDATE, DELETE
Instructions de gestion des transactions : COMMIT, ROLLBACK
Fonctions : TO_CHAR, TO_DATE, UPPER, SUBSTR, FOUND
Instructions spcifiques au PL/SQL
En PL/SQL, on a la possibilit :
- de grer des variables.
- dutiliser des structures de contrle (tests, boucles).
- de traiter le rsultat dune requte SELECT ligne par ligne (gestion des curseurs).
- de traiter les erreurs.
Bloc PL/SQL
Un bloc PL/SQL permet dinterprter un ensemble de commandes.
Il comporte trois sections (entre [], section facultative) :
[DECLARE]
/* Dclaration des variables, curseurs, exceptions */
BEGIN
/* Instructions SQL,
Instructions PL/SQL,
Structures de contrles */
[EXCEPTION]
/* Traitement des erreurs */
END ;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 71/131
Reproduction interdite
Gestion et utilisation des variables
Les variables permettent de stocker une valeur, issue de la Base de Donnes ou obtenue par calculs.
Les variables ne peuvent pas remplacer des noms de tables, de colonnes ou dautres objets de base de
donnes.
La commande Select permet daffecter des valeurs aux variables. Si aucune valeur nest renvoye par
linstruction daffectation Select, la valeur de la variable reste inchange.
Variables locales
Les variables locales :
- sont des entits dfinies par lutilisateur
- sont dfinies dans un bloc DECLARE
- sont dotes dun nom et dun type de donnes
- ont des valeurs attribues par lutilisateur
Type des donnes Oracle
Caractre CHAR(n), VARCHAR2(n), LONG, LONG RAW
Numrique NUMBER(n,m)
Date DATE

Exemples de dclaration et daffectation de variables de type oracle :
DECLARE
v_nom_client VARCHAR2(30) ;
v_cp_client NUMBER(5) ;
v_date_achat DATE ;
v_qte_achetee NUMBER := 0 ; -- initialisation
BEGIN
/* rcupration des donnes de la base dans des variables locales */
SELECT nom, code_postal
INTO v_nom_client, v_cp_client
FROM client
WHERE id_client = 5 ;
/* Affectation par calcul */
v_nom_client := Client : || v_nom_client ;
END;

Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 72/131
Reproduction interdite
Type de donnes PL/SQL
Numrique BINARY_INTEGER Entier
Boolen BOOLEAN Booleen : Valeurs TRUE, FALSE, NULL
Table TABLE OF Tableau
Record RECORD Structure de donne

Exemple de dclaration et daffectation de variables de type PL/SQL :
DECLARE
/* dclaration type de table PL/SQL : tableau de chanes de
caractres de longueur 15*/
TYPE Tab_Vin IS TABLE OF varchar2(15) INDEX BY BINARY_INTEGER ;
/* variable PL/SQL du type de table Tab_Vin */
v_tab_vin Tab_Vin ;
/* dclaration record */
TYPE Rec_Commande IS RECORD
( no_commande NUMBER(8),
date_commande DATE ) ;
/* variable PL/SQL du type de record Rec_Commande */
v_rec_commande Rec_Commande ;
BEGIN
/* rcupration donnes de la base dans un RECORD */
SELECT no_commande, date_commande
INTO v_rec_commande
FROM commande
WHERE id_client = 35 ;
/* affectation par calcul */
v_tab_vin(1) := Gigondas ;
/* affectation avec valeur issue de la base */
SELECT nom
INTO v_tab_vin(2)
FROM vin
WHERE id_vin = 1 ;
END ;


Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 73/131
Reproduction interdite
Types drivs
On fait rfrence au type dune entit dj existante.
%TYPE rfrence du type dune colonne dune table, dune variable
%ROWTYPE rfrence de la structure dune table, dun curseur
Exemple de dclaration :
- dune variable du type de la colonne nom de la table client
- dune variable ayant la structure dune ligne de la table client
DECLARE
v_nom_client client.nom%TYPE ;
v_ligneClient client%ROWTYPE ;
BEGIN
/* rcupration de la ligne entire */
SELECT *
INTO v_ligneClient
FROM client
WHERE id_client = 5 ;
/* rcupration valeur dune colonne */
v_nom_client := v_ligneClient.nom ;
END ;
Variables extrieures
Une variable extrieure est une variable dclare en dehors du bloc PL/SQL et utilisable lintrieur et
lextrieur du bloc.
On prfixe la variable par : lintrieur du bloc.
Exemple de dclaration et dutilisation dune variable extrieure
(nbr_acheteur):
SQL> VARIABLE nbr_client NUMBER
SQL> BEGIN
2 SELECT count(*) INTO :nbr_client FROM client;
3 END;
4 /
Procdure PL/SQL termine avec succs
SQL> PRINT nbr_client
nbr_client
10
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 74/131
Reproduction interdite
Structures de contrle
Elles permettent de contrler la squence dexcution de diffrentes instructions SQL. Elles sont utiles
dans les procdures stockes, les triggers,
Traitement conditionnel (IF)
Lexcution dune commande est dpendante dune certaine condition.
La condition est une expression boolenne dont le rsultat est TRUE ou FALSE.
IF <condition 1> THEN
<traitement 1> ;
[ELSIF <condition 2> THEN
<traitement 2> ;]
[ELSE
<traitement 3> ;]
END IF ;
Traitements rptitifs (LOOP, FOR, WHILE)
Boucle LOOP
Les instructions sont excutes en boucle infinie.
On sort de la boucle par la commande EXIT. La condition est une expression boolenne dont le rsultat est
TRUE ou FALSE.
LOOP
<instruction 1>,
<instruction 2> ;

EXIT [WHEN <condition> ];

END LOOP ;
Boucle FOR
Avec linstruction FOR, le nombre ditrations de la boucle est connu avant lexcution de la boucle. La valeur
de lindice est automatiquement incrmente ( ou dcrmente) au fur et mesure des itrations entre les
valeurs min et max spcifies.
FOR <indice> IN [REVERSE] <min> .. <max> LOOP
<instruction 1> ;
<instruction 2> ;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 75/131
Reproduction interdite

END LOOP ;
Boucle WHILE
While gnre une boucle qui rpte les instructions en fonction dune condition. Cette boucle permet
dexcuter des instructions tant quune <condition> est vrifie. La condition est une expression
boolenne dont le rsultat est TRUE ou FALSE.
WHILE <condition> LOOP
<instruction 1> ;
<instruction 2> ;

END LOOP ;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 76/131
Reproduction interdite
Curseurs
Dfinition
Un Curseur est une zone de mmoire de taille fixe, utilise par le moteur de la base Oracle pour analyser et
interprter tout ordre SQL .
Un curseur est un nom symbolique associ une instruction Select. Un curseur permet davancer ligne ligne
dans le jeu de rsultat. Lapplication peut effectuer un traitement sur chaque ligne individuellement.
On distingue deux types de curseur : les curseurs implicites et explicites.
Curseur implicite : Cest un curseur SQL gnr et gr par ORACLE pour chaque ordre SQL
Curseur explicite : Cest un curseur SQL gnr et gr par lutilisateur pour traiter un ordre SELECT qui
ramne plusieurs lignes
Attributs dun curseur implicite
SQL%FOUND = TRUE si le dernier ordre SQL a ramen une seule ligne ou trait au moins
une ligne
SQL%NOTFOUND = TRUE si ordre SQL na pas ramen ou na pas trait de ligne.
SQL%ROWCOUNT contient le nombre de lignes ramenes ou traites par lordre SQL
.
Utilisation des curseurs explicites
Pour utiliser un curseur vous devez effectuer les oprations suivantes :
Declare : Dclaration du curseur pour lopration Select effectuer
Open : Ouverture du curseur
Fetch : Extraction de la ligne dans le curseur pour traitement.
Close : Fermeture du curseur
Position du
curseur
1 KIESSE JACQUES
Ligne retourne
Jeu de rsultat
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 77/131
Reproduction interdite
Dclaration du curseur
La dclaration dun curseur permet de dfinir le nom du curseur et lopration de Select effectuer.
La dclaration dun curseur explicite se fait dans la section [DECLARE].
Il existe deux modes de curseur READ ONLY et UPDATE.
DECLARE
CURSOR <nom_curseur> IS
SELECT <colonne1>, <colonne2>, FROM <table>
WHERE <condition>;
Ouverture du curseur
Louverture dun curseur lance lexcution de la requte et alloue des ressources mmoires au curseur.
Le pointeur du curseur est plac avant la premire ligne du jeu de rsultats.
Louverture dun curseur explicite se fait dans un bloc BEGIN / END.
OPEN <nom_curseur> ;
Extraction des lignes du curseur ouvert
Aprs avoir dclar et ouvert un curseur, on peut extraire une ligne du jeu de rsultats.
FETCH <nom_curseur> INTO <variables> ;

Les donnes extraites du rsultat sont mises dans des variables.
La liste des variables doit correspondre la liste de colonnes indique dans linstruction Select.
Les types de donnes des colonnes et ceux des variables doivent correspondre.

Chaque excution de la commande FETCH ramne la ligne suivante traiter.
Attributs dun curseur explicite
Ce sont des variables systme qui permettent de connatre ltat dun curseur en cours dexcution.
<nom_curseur>%FOUND = TRUE si le dernier FETCH a ramen une ligne
<nom_curseur>%NOTFOUND = TRUE si le dernier FETCH na pas ramen de ligne
<nom_curseur>%ISOPEN = TRUE si le curseur est ouvert
<nom_curseur>%ROWCOUNT contient le numro de la ligne ramene par le dernier FETCH
.
Fermeture du curseur
La fermeture du curseur interrompt le traitement de la requte et dsalloue le curseur pour librer toutes les
ressources mmoires alloues au curseur.
CLOSE <nom_curseur> ;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 78/131
Reproduction interdite
Exemples dutilisation de curseur
Exemple : Rcupration dans des tables PL/SQL du nombre de bouteilles
achetes de chaque vin et insertion dans la table de QteAchetee.
Au pralable,
- crer la table
QteAchetee ( id_vin NUMBER(8), total_qte INTEGER ).
- dfinir variable extrieure nombre
SQL> VARIABLE nombre NUMBER
Ecriture n1 : Utilisation explicite des curseurs
DECLARE
/* Cration d'un tableau d'une colonne de type id_vin */
TYPE Tab_No_Vin IS TABLE OF vin.id_vin%TYPE
INDEX BY BINARY_INTEGER ;
v_tab_no_vin Tab_No_Vin ;
/* Cration d'un tableau d'un colonne de type quantite */
TYPE Tab_Qte_Achetee IS TABLE OF ligne_commande.quantite%TYPE
INDEX BY BINARY_INTEGER ;
v_tab_qte_achetee Tab_Qte_Achetee ;
v_indice NUMBER(2) := 0 ;
/* Dclaration du curseur pour le calcul du nombre de bouteilles
achetes de chaque vin */
CURSOR c_ligne_commande
IS
SELECT id_vin, SUM(quantite) qteAchetee
FROM ligne_commande
GROUP BY id_vin ;
/* Dclaration des variables de rcupration des donnes du curseur
*/
v_ligne_commande c_ligne_commande%ROWTYPE ;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 79/131
Reproduction interdite
BEGIN
IF c_ligne_commande%ISOPEN = TRUE THEN
CLOSE c_ligne_commande ;
END IF ;
/* Ouverture du curseur */
OPEN c_ligne_commande ;
/* Itration pour extraction des lignes du curseur */
LOOP
/* Lecture d'une ligne du curseur, s'il trouve un
enregistrement, il excute ce qu'il y a aprs l'instruction
EXIT et lit la ligne du curseur suivante, sinon il sort de la
boucle LOOP sans excuter ce qui suit le EXIT */
/* La ligne lue du curseur est envoye la variable
V_ligne_commande qui est du type d'une ligne de la table
c_commande*/
FETCH c_ligne_commande INTO v_ligne_commande ;
/* Sortie de la boucle lorsque curseur ne ramne plus de ligne
*/
EXIT WHEN c_ligne_commande%NOTFOUND ;
v_indice := v_indice + 1 ;
/* Affectation du champ id_vin rcupr du curseur dans la
premire ligne du tableau de type id_vin dclar au dbut */
v_tab_no_vin(v_indice) := v_ligne_commande.id_vin ;
/* Affectation du champ quantit rcupr du curseur dans la
premire ligne du tableau de type quantit dclar au dbut */
v_tab_qte_achetee(v_indice):=v_ligne_commande.qteachetee;
/* Insertion des valeurs rcupres (c'est dire v_tab_no_vin
et v_tab_qte_achetee) dans la table cre QteAchetee */
INSERT INTO QteAchetee
VALUES
(v_tab_no_vin (v_indice), v_tab_qte_achetee(v_indice)) ;
END LOOP ;
/* rcupration du nombre de vins ayant t achets */
:nombre := v_indice;
/* Sauvegarde les insertions faites dans la table avant de fermer le
curseur et de sortir */
COMMIT ;
/* Fermeture du curseur */
CLOSE c_ligne_commande ;
END ;
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 80/131
Reproduction interdite
Visualisation des rsultats :
SQL> PRINT nombre

SQL> SELECT id_vin Numero Vin , total_qte Qt achete


2 FROM QteAchetee ;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 81/131
Reproduction interdite
Ecriture n2 : Autre utilisation des curseurs sur le mme exemple
Vider au pralable la table QteAchetee
SQL> truncate table QteAchetee;
Boucle FOR pour les curseurs
On ne dclare pas la variable v_ligne_commande
Louverture et la fermeture du curseur sont implicites.
DECLARE
TYPE Tab_No_Vin IS TABLE OF vin.id_vin%TYPE
INDEX BY BINARY_INTEGER ;
v_tab_no_vin Tab_No_Vin ;
TYPE Tab_Qte_Achetee IS TABLE OF ligne_commande.quantite%TYPE
INDEX BY BINARY_INTEGER ;
v_tab_qte_achetee Tab_Qte_Achetee ;
v_indice NUMBER(2) := 0 ;
/* Dclaration du curseur pour la recherche du nombre de bouteilles
achetes de chaque vin */
CURSOR c_ligne_commande
IS
SELECT id_vin, SUM(quantite) qteAchetee
FROM ligne_commande
GROUP BY id_vin;
/* On ne dclare pas la variable v_ligne_commande */
BEGIN
IF c_ligne_commande %ISOPEN = TRUE THEN
CLOSE c_ligne_commande;
END IF ;
/* Louverture et la fermeture du curseur est implicite. */
FOR v_ligne_commande IN c_ligne_commande
LOOP
v_indice := v_indice + 1 ;
v_tab_no_vin(v_indice) := v_ligne_commande.id_vin ;
v_tab_qte_achetee(v_indice) := v_ligne_commande.qteachetee;
INSERT INTO QteAchetee
VALUES
(v_tab_no_vin (v_indice), v_tab_qte_achetee(v_indice)) ;
END LOOP ;
:nombre := v_indice;
COMMIT ;
END ;
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 82/131
Reproduction interdite
Modification des donnes laide dun curseur
A partir de la position courante dun curseur, on peut supprimer ou modifier une ligne dune table.
Au pralable, il faut avoir verrouill les lignes lors de la dclaration du curseur en utilisant la syntaxe FOR
UPDATE OF <nom colonne>
La clause CURRENT OF permet laccs en modification ou suppression de la ligne ramene par le dernier
FETCH.
Exemple : Mise jour de la table des commandes suite la constatation
suivante : Toutes les commandes effectues le 18 aot 1998 sont en fait du
19 aot 1998.
DECLARE
CURSOR c_commande
IS
SELECT date_commande
FROM commande
WHERE date_commande = to_date(19980818,YYYYMMDD)
FOR UPDATE OF date_commande ;
v_rec_commande c_commande%ROWTYPE ;
BEGIN
OPEN c_commande ;
FETCH c_commande INTO v_rec_commande;
WHILE c_commande%FOUND LOOP
UPDATE commande
SET date_commande = v_rec_commande.date_commande + 1
WHERE CURRENT OF c_commande ;
FETCH c_commande INTO v_rec_commande ;
END LOOP ;
COMMIT ;
CLOSE c_commande ;
END ;
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 83/131
Reproduction interdite
Curseur paramtr
Passage de valeurs (paramtres) lors de louverture dun curseur, afin de les utiliser dans la requte SELECT.
On naffecte pas de taille au type de donne de chacun des paramtres.
Exemple : Mise jour de la table des commandes
DECLARE
/* Dclaration dun curseur avec un paramtre date_traitee */
CURSOR c_commande (date_traitee VARCHAR2)
IS
SELECT date_commande
FROM commande
WHERE date_commande = to_date(date_traitee,YYYYMMDD)
FOR UPDATE OF date_commande ;
v_rec_commande c_commande%ROWTYPE ;
BEGIN
/* Ouverture du curseur avec valorisation du paramtre date_traitee
*/
OPEN c_commande(19980818) ;
FETCH c_commande INTO v_rec_commande;
WHILE c_commande%FOUND LOOP
UPDATE commande
SET date_commande = v_rec_commande.date_commande + 1
WHERE CURRENT OF c_commande ;
FETCH c_commande INTO v_rec_commande ;
END LOOP ;
COMMIT ;
CLOSE c_commande ;
END ;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 84/131
Reproduction interdite
Blocs Imbriqus
Notion de blocs dans un bloc PL/SQL : sous-blocs
La section BEGIN dun bloc PL/SQL peut contenir ventuellement un ou plusieurs blocs PL/SQL et ainsi de
suite.
DECLARE -- bloc 1
var_1 <type> ;
var_2 <type> ;
BEGIN bloc 1

BEGIN bloc 11

END ; -- bloc 11
DECLARE -- bloc 12
var_2 <type>;
BEGIN -- bloc 12

END ; -- bloc 12

EXCEPTION -- bloc 1

END ; -- bloc 1
Visibilit des variables
Une variable est visible dans le bloc de sa dclaration .
Une variable est visible dans les blocs imbriqus dans le bloc de sa dclaration.
Ci dessus, la variable
var_2 dclare dans le bloc 1
est visible dans les blocs 1 et 11
nest pas visible dans le bloc 12 car redfinie dans ce dernier
var_1 dclare dans le bloc 1
est visible dans les blocs 1, 11 et 12
var_2 dclare dans le bloc 12
est visible uniquement dans le bloc 12
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 85/131
Reproduction interdite
Exceptions
Ce sont des erreurs survenant lors de lexcution de bloc PL/SQL.
Elles sont traites dans la section EXCEPTION dun bloc PL/SQL.
EXCEPTION
WHEN <exception 1> [OR <exception 2>] THEN
<traitement 1> ;

[WHEN OTHERS THEN


. ]
Deux types dexceptions existent :
- erreur interne Oracle.
- erreur utilisateur (anomalie programme).
Erreurs internes ORACLE
Exceptions prdfinies
Elles sont dclenches automatiquement.
Les principales exceptions sont :
NO_DATA_FOUND
TOO_MANY_ROWS
INVALID_CURSOR
ZERO_DIVIDE
Exemple : Vrification existence numro des vins achets dans table vin
avec gestion de lexception NO_DATA_FOUND.
La variable extrieure message permet de rcuprer ltat de la table vin
par rapport aux LIGNE_COMMANDE effectus.
SQL> VARIABLE message VARCHAR2(50)
DECLARE
CURSOR c_vin
IS
SELECT id_vin
FROM vin ;
v_numero tab_v_numero;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 86/131
Reproduction interdite
BEGIN
FOR c_vin_rec IN c_vin LOOP
v_numero:= c_vin_rec.id_vin ;
SELECT id_vin
FROM ligne_commande
WHERE id_vin = c_vin_rec.id_vin ;
END LOOP ;
/* si tous les vins ont un enregistrement dans la table
ligne_commande */
:message := Tous les vins ont t commands;
EXCEPTION
WHEN NO_DATA_FOUND THEN
:message := Aucune commande pour le vin || v_numero ;
END ;
/
Exceptions Oracle non prdfinies
Elles sont dclenches
- par WHEN OTHERS dans la section [EXCEPTION] dun bloc PL/SQL
ou
- par dfinition et association du nom de lexception un numro standard Oracle dans la section
DECLARE dun bloc PL/SQL.
Exemple : Si on insre dans la table vin un vin dont le numro est plus
grand quun number(2), on rcupre lerreur suivante :
*
ERROR at line 1:
ORA-01438: value larger than specified precision allows for this column
Si on souhaite grer cette exception Oracle non-prdfinie, il faut
associer lexception num_grand l erreur oracle 1438 : valeur trop
grande pour une colonne
La variable message est une variable extrieure.
DECLARE
/* Dclaration dune exception non prdfinie */
num_grand EXCEPTION ;
PRAGMA EXCEPTION_INIT (num_grand, -1438) ;
BEGIN
INSERT INTO vin
(id_vin, nom, millesime)
VALUES (100,Buzet,1992) ;
:message := Numro vin OK ;
EXCEPTION
WHEN num_grand THEN
/* Traitement associ lexception */
:message := Le numro du vin doit tre infrieur 100 ;
END ;
/
SQL> PRINT message
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 87/131
Reproduction interdite
Erreurs utilisateur
Elles sont dfinies dans la section [DECLARE] dun bloc PL/SQL
Elles sont dclenches explicitement par la commande RAISE.
Exemple : Vrification que tous les vins de la table vin possdent un
nom (colonne nom) non NULL.
La variable message est une variable extrieure.
DECLARE
CURSOR c_vin
IS
SELECT id_vin, nom
FROM vin ;
/* exception utilisateur */
invalid_vin EXCEPTION ;
numero integer(2);
BEGIN
FOR rec_vin IN c_vin LOOP
/* la fonction LTRIM() permet de considrer une colonne avec
des blancs comme une colonne non renseigne */
IF LTRIM(rec_vin.nom) IS NULL THEN
/* Dclenchement de lexception utilisateur */
RAISE invalid_vin ;
END IF ;
END LOOP ;
:message := Chaque vin possde bien un nom ;
EXCEPTION
WHEN invalid_vin THEN
/* Traitement associ lexception utilisateur */
:message := Nom du vin numero : || numero || INVALIDE ;
END ;
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 88/131
Reproduction interdite
Identification erreur gre par WHEN OTHERS
Lorsquune erreur est traite par WHEN OTHERS dans la section [EXCEPTION] dun bloc PL/SQL, on peut
rcuprer son code derreur (variable SQLCODE) ainsi que son libell (variable SQLERRM).
Exemple : Affectation code et libell de lerreur dans des variables
v_code_erreur et v_libel_erreur.
DECLARE
v_code_erreur Number ;
v_libel_erreur VARCHAR2(255) ;
BEGIN
EXCEPTION
WHEN OTHERS THEN
v_code_erreur := SQLCODE ;
v_libel_erreur := LPAD(SQLERRM,255) ;
END ;
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 89/131
Reproduction interdite
Propagation des erreurs
Un bloc traite une erreur dans son ventuelle section EXCEPTION si elle est gre sinon lerreur remonte
immdiatement au bloc lencapsulant.
Si lon souhaite traiter dans un bloc une exception gre dans un de ses sous bloc , il faut propager
lexception par RAISE dans partie EXCEPTION du sous bloc.
Exemple :
- lexception1 du bloc 111 est traite dans le bloc 111 mais pas propage
dans le bloc 11
- lexception1 du bloc 12 est traite dans le bloc 12 et propage dans
bloc 1
- lexception2 du bloc 12 est traite dans le bloc 1
DECLARE -- bloc 1
exception1 EXCEPTION ;
exception2 EXCEPTION ;
BEGIN -- bloc 1

BEGIN -- bloc 11

BEGIN -- bloc 111


/* Exception traite dans le bloc courant */
RAISE exception1 ;
EXCEPTION
WHEN exception1 THEN
/* Exception traite dans le bloc courant */

END ;
END ;

BEGIN -- bloc 12
/* Exception traite dans le bloc 12 */
RAISE exception1 ;
/* Exception traite dans le bloc 1 */
RAISE exception2 ;
EXCEPTION
WHEN exception1 THEN
/* Exception traite dans le bloc courant et propage
dans le bloc 1 */
RAISE ;
END ;

EXCEPTION -- bloc 1
WHEN OTHERS THEN

END ;
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 90/131
Reproduction interdite
PL/SQL dans les objets de la base
Procdures stockes
Une procdure stocke est un ensemble dinstructions SQL stockes dans une base de donnes et excutes
par un nom.
Prsentation
Il sagit de code PL/SQL stock dans la base et pouvant tre appel par des applications
- dans un bloc PL/SQL
- par excution sous SQL*PLUS
Elles sont stockes dans leur version pr-compile
Elles ont une excution plus rapide que les mmes commandes lances en batch.
Elles rduisent le trafic sur le rseau
Dclaration dune procdure
La cration ou le remplacement dune procdure se fait par la commande :
CREATE [OR REPLACE] PROCEDURE <nomProcedure>
[(<parametre> {IN/OUT/IN OUT} <type> , )]
IS
<bloc PL/SQL>
END [<nomProcedure> ];
/
Exemple : Procdure de calcul de la quantit de vin command partir de
son numro.
CREATE OR REPLACE PROCEDURE p_info_vin
( e_num IN vin.id_vin%TYPE,
s_qte OUT ligne_commande.quantite%TYPE )
IS
BEGIN
SELECT SUM(quantite)
INTO s_qte
FROM ligne_commande
WHERE id_vin = e_num ;
END p_info_vin ;
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 91/131
Reproduction interdite
Utilisation dune procdure
- par SQL*PLUS :
Exemple :
SQL> VARIABLE quantite NUMBER(4)
SQL> EXECUTE p_info_vin (5, quantite) ;

- dans un bloc PL/SQL :


Exemple :
/* Vider la table QteAchetee au pralable */
SQL>TRUNCATE TABLE QteAchetee ;
DECLARE
v_id_vin vin.id_vin%TYPE ;
v_quantite ligne_commande.quantite%TYPE ;
BEGIN
v_id_vin :=5 ;
p_info_vin (v_id_vin, v_quantite) ;
INSERT INTO QteAchetee
VALUES (v_id_vin, v_quantite) ;
END ;
/
Visualisation des rsultats :
SQL> SELECT id_vin Numro Vin , total_qte Quantit Achete
2 FROM QteAchetee ;

Suppression dune procdure


La suppression dune procdure seffectue par la commande :
SQL> DROP PROCEDURE <nomProcedure>;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 92/131
Reproduction interdite
Fonctions
Prsentation
Il sagit de code PL/SQL stock dans la base et utilisable par les applications
- par SQL*PLUS
- dans un bloc PL/SQL
A la diffrence dune Procdure, une Fonction renvoie une valeur.
Dclaration dune fonction
La cration ou le remplacement dune fonction se fait par la commande:
CREATE [OR REPLACE] FUNCTION <nomFonction>
[(<parametre> [IN] <type> , )]
RETURN <type>
IS
<bloc PL/SQL>
END [<nomFonction>] ;
Exemple : Fonction de recherche du nom dun vin partir de son numro.
CREATE OR REPLACE FUNCTION f_info_vin
(e_num IN vin.id_vin%TYPE)
RETURN VARCHAR2
IS
v_nom VARCHAR2 (15) ;
BEGIN
SELECT nom
INTO v_nom
FROM vin
WHERE id_vin = e_num ;
RETURN v_nom ;
END f_info_vin ;
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 93/131
Reproduction interdite
Utilisation dune fonction
- par SQL*PLUS :
Exemple :
SQL> SELECT f_info_vin(50) FROM DUAL ;

- dans un bloc PL/SQL :


Exemple :
DECLARE
v_nom vin.nom%TYPE ;
v_numero NUMBER(2) := 50 ;
BEGIN
v_nom := f_info_vin (v_numero) ;
END ;
Suppression dune fonction
La suppression dune fonction se fait par la commande :
SQL> DROP FUNCTION <nomFonction>;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 94/131
Reproduction interdite
Package
Prsentation
Cest un ensemble dobjets ( Procdures,
Fonctions,
Types,
Variables,
Curseurs,
Exceptions . )
stocks dans la base en un mme endroit.
Dclaration dun package
Un package comprend une partie SPECIFICATION (dclaration Procdures, ) et une partie CORPS (dfinition
Procdures, )
La cration ou le remplacement de la partie spcification dun package se fait par la commande :
/* PARTIE SPECIFICATION */
CREATE [OR REPLACE] PACKAGE <nomPackage>
AS

/* Dclaration Procdures, Fonctions, . */

END <nomPackage> ;
/
La cration ou le remplacement du corps dun package se fait par la commande :
/* CORPS */
CREATE [OR REPLACE] PACKAGE BODY <nomPackage>
AS

/* Dfinition Procdures, Fonctions, dclares */

END <nomPackage> ;
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 95/131
Reproduction interdite
Exemple : Cration Package contenant le record rec_vin, la procdure
p_info_vin et la fonction f_info_vin des chapitres PROCEDURE et FONCTION
prcdents.
/* SPECIFICATION */
CREATE OR REPLACE PACKAGE pck_info_vin
AS
TYPE rec_vin IS RECORD
( nom vin.nom%TYPE,
millesime vin.millesime%TYPE) ;
FUNCTION f_info_vin
(e_num IN vin.id_vin%TYPE)
RETURN VARCHAR2 ;
PROCEDURE p_info_vin
(e_num IN vin.id_vin%TYPE,
s_qte OUT ligne_commande.quantite%TYPE) ;
END pck_info_vin ;
/
/* CORPS */
CREATE OR REPLACE PACKAGE BODY pck_info_vin
AS
FUNCTION f_info_vin
(e_num IN vin.id_vin%TYPE)
RETURN VARCHAR2
IS
v_nom VARCHAR2 (15) ;
BEGIN
SELECT nom
INTO v_nom
FROM vin
WHERE id_vin = e_num ;
RETURN v_nom ;
END f_info_vin ;
PROCEDURE p_info_vin
(num IN vin.id_vin%TYPE,
s_qte OUT ligne_commande.quantite%TYPE) ;
IS
BEGIN
SELECT SUM(quantite)
INTO s_qte
FROM ligne_commande
WHERE id_vin = e_num ;
END p_info_vin ;
END pck_info_vin ;
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 96/131
Reproduction interdite
Utilisation dun package
- dans un bloc PL/SQL :
/* Vider la table QteAchetee au pralable */
SQL>TRUNCATE TABLE QteAchetee ;
DECLARE
v_id_vin vin.id_vin%TYPE :=50 ;
v_quantite ligne_commande.quantite%TYPE ;
BEGIN
pck_info_vin.p_info_vin (v_id_vin, v_quantite) ;
INSERT INTO QteAchetee
VALUES (v_id_vin, v_quantite) ;
END ;
/
Visualisation des rsultats :
SQL> SELECT id_vin Numro Vin , total_qte Quantit Achete
2 FROM QteAchetee ;
Suppression dun package
La suppression du corps dun package se fait par la commande :
SQL> DROP PACKAGE BODY <nomPackage>;
La suppression dun package (partie spcification + corps) se fait par la commande :
SQL> DROP PACKAGE <nomPackage>;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 97/131
Reproduction interdite
Database Triggers
Prsentation
Un trigger est un type de procdure stocke propre une table et fonction des vnements sur cette table.
Les instructions PL/SQL dun trigger associ une table, sexcutent automatiquement lorsque linstruction
{INSERT/DELETE/UPDATE} est lance sur la table concerne.
Seul le propritaire de la table peut crer un trigger sur cette table.
Les triggers ne peuvent pas tre appels directement. Les triggers ne sont pas paramtrables.
Une table peut comporter jusqu trois triggers : un pour update, un pour insert et un pour delete.
Dclaration dun trigger
La cration ou le remplacement dun trigger se fait par la commande :
CREATE [OR REPLACE] TRIGGER <nomTrigger>
{BEFORE/AFTER} {INSERT/DELETE/UPDATE}
ON <nom de la table>
[WHEN <condition>]
<bloc PL/SQL>
Exemple : Excution bloc PL/SQL avant suppression dun enregistrement
dans la table vin. Vrification que lenregistrement supprim ne possde pas
de liens avec les tables commandes sinon il faut aussi supprimer les
enregistrements dans la table ligne_commande qui rfrence lid_vin et dans
la table commande qui rfrence le no_commande
CREATE TRIGGER supp_vin
BEFORE DELETE ON vin
REFERENCING OLD AS numero
DECLARE
num_commande number(8);
BEGIN
SELECT no_commande INTO num_commande
FROM ligne_commande
WHERE id_vin=numero;
IF (num_commande<>NULL) THEN
DELETE FROM commande
WHERE no_commande = num_commande;
DELETE FROM ligne_commande
WHERE id_vin=numero;
ELSE
STOP;
END IF;
end;
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 98/131
Reproduction interdite
Excution dun trigger
Lexcution dune instruction Insert, Update ou Delete sur les lignes dune table associe un trigger
dclenche ce dernier.
Exemple : Excution bloc PL/SQL avant suppression dun enregistrement
dans la table vin
BEGIN
/* Lexcution de la commande suivante dclenche le trigger sup_vin
*/
DELETE FROM vin WHERE id_vin = 5 ;
END ;
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 99/131
Reproduction interdite
SQLPLUS
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 100/131
Reproduction interdite
INTRODUCTION
SQLPLUS est un outil Oracle permettant de se connecter une base de donnes pour regarder les objets
sy trouvant ainsi quexcuter des requtes SQL et des procdures stockes. Il est livr avec le noyau
Oracle . Il est utilisable sous windows, comme sous UNIX.
Cest un outil en mode commande, dont il est souvent ncessaire de formater le rsultat pour quil soit
exploitable.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 101/131
Reproduction interdite
CONNEXION
Unix
Sous UNIX avant de lancer la commande sqlplus, il faut que les variables denvironnement suivantes
soient dfinies.
ORACLE_HOME = Rpertoire du noyau Oracle
ORACLE_SID = Nom de la base de donnes
et si on veut utiliser SQL*Net
TNS_ADMIN= rpertoire des fichiers de configuration SQL*Net
(TNSNAMES.ORA et SQLNET.ORA).
Ensuite il suffit de taper la commande sqlplus nom_utilisateur_Oracle /Password ;
avec SQL*Net :
sqlplus nom_utilisateur_Oracle / Password@ALLIAS_SQL*Net_v2 ;
Oracle regarde la dfinition de lALLIAS_SQL*Net_v2 dans le fichier TNSNAMES.ORA pour savoir quelle
base attaquer.
Windows
Sous Windows aprs linstallation du produit, on clique sur licne Sql-Plus, puis on renseigne les
informations demandes :
nom_utilisateur_Oracle
Password
ALLIAS_SQL*Net_v2 dfinit dans repertoire_oracle\network\admin\tnsnames.ora.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 102/131
Reproduction interdite
Commandes Utiles.
DESC.
La commande DESC (pour describe) permet de visualiser la structure dune table.
On obtient comme rsultat le nom des colonnes, le type des colonnes (NUMBER, VARCHAR2, ..) et la
clause NULL ou NOT NULL pour savoir si la colonne est obligatoire ou facultative.
DESC nom_table ;
START.
La Commande Start ou @ excute un fichier contenant une requte SQL. Par dfaut Oracle utilise
lextension .sql .
Exemple : START fichier.sql ou @fichier.sql ou @fichier (si le nom est
fichier.sql)
Contenu de fichier.sql:
SELECT * FROM nom_table;
On peut galement passer des paramtres.
Exemple : @fichier.sql nom_table nom_colonne_1 Param1
contenu du fichier.sql
SELECT &2 FROM &1 WHERE col_table = &3;
&1 premier paramtre, &2 deuxime paramtre, &3 troisime paramtre.
Oracle va excuter.
SELECT nom_colonne_1 FROM nom_table WHERE col_table = Param1;
ED.
La commande ED (pour edit ) sert diter un fichier pour taper une requte SQL. Par dfaut Oracle
utilise lextension .SQL .
Exemple: ED fichier.sql
Si la commande ed est lance sans paramtre, Oracle dite la
dernire commande sql excute dans un fichier afiedt.buf .
L.
La commande L (pour list) liste la dernire commande excute.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 103/131
Reproduction interdite
R
La commande R (pour run ) excute la commande dans le buffer actuel (rsultat de la commande list).
PROMPT.
La commande prompt permet dafficher une chane de caractres, utile pour mettre des traces dans
les fichiers .sql
SET.
La commande set permet de positionner des paramtres Sql-Plus comme par exemple:
SET PAGES n : O n est le nombre de lignes dune page.
SET TIMING on|off: Permet de connatre le temps coul de chaque ordre SQL.
SET LINESIZE n: O n est le nombre de caractres dune ligne.
SET ECHO on|off : Permet de visualiser la requte excuter
SET FEEDBACK on|off: Inhibe ou non le nombre de lignes retournes dans une requte SQL.
Il en existe dautres pour des usages spcifiques (Voir Sql-Plus rfrences).
SHOW
Pour visualiser toutes les variables positionnes on tape SHOW ALL
HELP.
Sous windows, lorsquon tape help on lance la documentation Sql-Plus Users Guide and Reference.
SPOOL.
La commande SPOOL permet dcrire dans un fichier tout ce qui est affich lcran sous Sql-Plus.
Cette commande est pratique pour vrifier le rsultat de traitement.
Exemple : spool fichier.lst
Toutes les commandes et tous les rsultats dfilent lcran et sont crits dans fichier.lst . Par dfaut,
Oracle utilise lextension lst.
Pour arrter lcriture dans le fichier, on lance la commande :
spool off
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 104/131
Reproduction interdite
Formatage.
Sql-Plus propose plusieurs fonctions de formatage de requtes SQL.
Formatage colonne.
La commande COL (pour column ) permet de formater le rsultat sur un nom de colonne utilis dans la
requte SQL.
Les principales options sont:
* FOR (pour format) cette option formate le contenu dune colonne.
Exemple:
COL nom_de_colonne FOR A10 (colonne de type VARCHAR2) ;
/* le contenu de la colonne sera sur 10 caractres maxi par lignes.*/
Exemple: COL nom_de_colonne FOR 9999 (colonne de type NUMBER) ;
/* le contenu de la colonne sera reprsent sur 4 chiffres.*/
* HEA (pour heading) redfinit lentte de la colonne.
Exemple : COL nom_de_colonne FOR 9999 HEA NEW_NOM ;
/* Le contenu de la colonne sera reprsent sur 4 chiffres avec comme en-
tte new_nom*/
* TRU (pour truncate) tronque le rsultat.
Exemple : COL nom_de_colonne FOR A10 TRU
/* Le rsultat sera tronqu au 11me caractre, alors que dans loption
col NOM_DE_COLONNE for A10 , il y aura un passage la ligne aprs le
10me caractre.*/
Break
La commande BRE (pour break) permet de regrouper laffichage de rsultat.
Chaque fois que la colonne spcifie a la mme valeur conscutive, Oracle affiche un blanc la place de
la valeur de la colonne.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 105/131
Reproduction interdite
Exemple: sans break.
SELECT * FROM nom_table;
rsultat :
colonne_1 Colonne_2
VAL_1 VAL_2
VAL_1 VAL_3
VAL_2 VAL_3
VAL_1 VAL_2
avec la commande break :
BRE ON colonne_1
SELECT * FROM nom_table;
rsultat :
colonne_1 Colonne_2
VAL_1 VAL_2
VAL_3
VAL_2 VAL_3
VAL_1 VAL_2 /* La valeur VAL_1 est rpte car il ny a
pas de tri*/
Compute
Avec les commandes BREAK et COMPUTE, on peut effectuer des calculs sur les regroupements
effectus.
Les diffrentes fonctions sont :
SUM Somme des valeurs de la colonne
MIN Minimum des valeurs de la colonne
MAX Maximum des valeurs de la colonne
AVG Moyenne des valeurs de la colonne
STD Ecart type des valeurs de la colonne
VAR Variance des valeurs de la colonne
COUNT Nombre des valeurs non nulles de la colonne
NUM Nombre des valeurs de la colonne y compris les valeurs nulles
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 106/131
Reproduction interdite
Exemple :
BRE ON colonne_1
COMPUTE SUM OF colonne_1 ON colonne_2 ;
Oracle calcule la somme des valeurs de la colonne 2 pour chaque valeur de
la colonne_1 conscutive.
SELECT * FROM nom_table;
rsultat :
colonne_1 Colonne_2
VAL_1 VAL_2
VAL_3
*********** ----------
sum (val_2 + val_3)
VAL_2 VAL_3
*********** ----------
sum (val_3)
VAL_1 VAL_2
*********** ----------
sum (val_2)
Si on veut la somme des valeurs distinctes de colonne_1 il faut ajouter un
order by dans la requte SQL.
SELECT * FROM nom_table ORDER BY colonne_1;
colonne_1 Colonne_2
VAL_1 VAL_2
VAL_3
VAL_2
*********** ----------
sum (val_2 + val_3 + val_2)
VAL_2 VAL_3
*********** ----------
sum (val_3)
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 107/131
Reproduction interdite
Login.sql
Lorsquon lance Sql-Plus, Oracle excute le contenu du fichier login.sql . Dans ce fichier, sont indiqus
gnralement les options SET et les formatages que lon dsire pour la session.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 108/131
Reproduction interdite
Trucs et Astuces
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 109/131
Reproduction interdite
Les objets que lon possde.
Une fois connect la base de donnes avec SQL*PLUS, on peut utiliser la commande SHOW USER
, pour connatre avec quel utilisateur lon sest connect.
On peut interroger le catalogue Oracle pour connatre les objets qui appartiennent lutilisateur courant
avec les commandes suivantes:
1) SELECT * FROM CAT; (ou SELECT * FROM USER_CATALOG;)
Rsultat TABLE_NAME TABLE_TYPE
---------------------
----------------
---------------------
----------------
Nom_Table TABLE
Nom_Squence SEQUENCE
Nom_Synonym SYNONYM
On peut connatre que trois types dobjets (TABLES, SEQUENCES, SYNONYMS).
2) SELECT Object_name, Object_type FROM USER_OBJECTS;
Rsultat OBJECT_NAME OBJECT_TYPE
---------------------
----------------
---------------------
----------------
Nom_Table TABLE
Nom_Squence SEQUENCE
Nom_Synonym SYNONYM
Nom_Procdure PROCEDURE
Nom_Package PACKAGE
Nom_Package_body PACKAGE_BODY
Nom_Fonction FONCTION
Nom_index INDEX
Remarques: Avec les colonnes CREATED et LAST_DDL_TIME, on peut connatre la date de cration de
lobjet et la date de modification de lobjet (ex: Alter table ...).
On peut interroger les tables :
USER_TABLES pour le nom des tables;
USER_INDEX pour les index;
USER_SEGMENTS pour (tables + Index)
USER_SEQUENCES pour les squences.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 110/131
Reproduction interdite
Les index dune table.
Il est souvent utile de connatre les index dune table pour tudier les performances dune requte ou savoir sur
quelles colonnes portent lunicit dune ligne.
Sous SQL*Plus, on peut lancer un script qui ramne les index dune table en interrogeant les tables
USER_IND_COLUMNS et USER_INDEX.
/* Fonctions de formatages de colonnes */
SET PAGES 40
COL index_name FOR a11
COL table_name FOR a7 HEADING TABLE
COL uniqueness FOR a10
COL column_name FOR a15
COL column_position FOR 99 HEADING POS
/* Formatage du rsultat */
BRE ON table_name SKIP 1 ON index_name SKIP 1 ON UNIQUENES
SHOW user /* Connatre lutilisateur */
SELECT i.table_name, i.index_name, i.uniqueness, c.column_position
,c.column_name
FROM user_ind_columns c, user_index i
WHERE i.index_name = c.index_name
AND i.table_name = upper('&1')
/* Avoir le nom de la table en 1er paramtre et le transformer en
majuscule */
ORDER BY 1, 2, 4;
Rsultat :
Enter value for 1: LIGNE_COMMANDE
old 4: AND i.table_name = UPPER('&1')
new 4: AND i.table_name = UPPER('LIGNE_COMMANDE')
TABLE INDEX_NAME UNIQUENESS POS COLUMN_NAME
------- ----------- ---------- --- --------------
----------
LIGNE_COMM
ANDE
ACHAT_I1 UNIQUE 1 NO_ACHET
2 NO_VIN
ACHAT_I2 NONUNIQUE 1 NO_VIN
Autres index utiliss dans le document.
TABLE INDEX_NAME UNIQUENESS POS COLUMN_NAME
------- ----------- ---------- --- --------------
----------
ACHETEURS ACHETEUR_I01 UNIQUE NO_ACHET
VINS VIN_I01 UNIQUE 1 NO_VIN
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 111/131
Reproduction interdite
Les doublons dune table.
On peut connatre les lignes doublons dune table (colonnes ayant la mme valeur) en utilisant les fonctions
group by et having.
SELECT col_1, col_2, col_3 , COUNT(*) FROM nom_table
GROUP BY col_1, col_2, col_3
HAVING COUNT(*) >1;
Rsultat : Toutes les lignes o col_1,col_2,col_3 sont identiques (group
by col_1, col_2,col_3) et rptes plus dune fois (HAVING COUNT(*) >1).
Seront affiches le tripl de colonnes, ainsi que le nombre de rptition (count(*)) , Si le nombre de rptition
est suprieur 1.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 112/131
Reproduction interdite
Mettre des traces dans les Procdures PL/SQL.
Pour mettre des traces dans les procdures PL/SQL, il faut positionner la variable SERVEROUTPUT ON.
Puis dans la procdure PL, utiliser la fonction DBMS_OUTPUT.PUT_LINE pour les affichages de traces.
Sous SQLPLUS
SQL>SET SERVEROUTPUT ON
SQL>EXECUTE PROCEDURE PL/SQL
Dans la procdure PL/SQL
.
/* Texte libre */
DBMS_OUTPUT.PUT_LINE (Texte pour mettre une trace );
.
.
/* Texte libre + valeur dune variable de la procdure (v_number) */
DBMS_OUTPUT.PUT_LINE ('v_number = '||v_number );
.
.
/* Texte libre + valeur dune variable ORACLE */
DBMS_OUTPUT.PUT_LINE ('sqlerror = '||SQLCODE ); /* Numro de lerreur SQL
oracle */
.
/* Nombre de lignes traites par le curseur C0 */
DBMS_OUTPUT.PUT_LINE ('NB = '||C0%rowcount);
.
G Remarque : Par dfaut la taille du buffer utilis par la procdure dbms_output.put_line est de 2K. Il est
possible davoir des plantages lorsque la taille du buffer est atteinte.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 113/131
Reproduction interdite
Quels sont les index utiliss pour une requte
SQL donne.
Pour savoir si une requte est performante, il faut tre capable de lanalyser.
Lors de l'excution d'une requte, Oracle constitue un plan d'excution qui correspond son ordre de parcours
des tables et des index qu'il utilise pour sa recherche.
Il est possible de rcuprer le plan d'excution d'une requte en prcdant son excution de la commande
EXPLAIN PLAN.
L'utilisation de cette commande ncessite l'existence d'une table de travail ( ex : PLAN_TABLE) dans la base
de donne. Vous pouvez la crer grce au script Oracle utlxplan.sql qui se trouve dans
$ORACLE_HOME/rdbms/admin/utlxplan.sql (voir en annexe son contenu).
La commande EXPLAIN PLAN prcde la requte analyser.
EXPLAIN PLAN
[SET STATEMENT ID = 'text']
[INTO [schema.]table[@dblink]]
FOR statement ;
Lorsque la commande a t excute, le rsultat est consultable dans la table de travail (PLAN_TABLE).
Lintrt de cette mthode (partie de loutil TKProf), cest que lon peut analyser nimporte quelle requte sans
mettre la base de donnes en mode trace, ni connatre aucune valeur dans les prdicats ( where COL_1 =
:val_col). Quelle que soit la valeur de val_col, Oracle va lanalyser de la mme faon ( condition dutiliser la
base de donnes avec la variable optimizer_mode=rule (Voir. avec le DBA).
On peut crire un script (plan_tab.sql) qui permet lanalyse et le formatage du rsultat.
Exemple de script plan_tab.sql .
TRUNCATE TABLE plan_table; /* Purge dancien rsultat */
SET ECHO ON
EXPLAIN PLAN /* Commande danalyse */
SET statement_id = '00'
INTO plan_table
FOR
SELECT * FROM ligne_commande, vin /* Exemple de requte analyser */
WHERE ligne_commande.id_vin = vin.id_vin;
/* Formatage du rsultat */
SET ECHO OFF
COL operation FOR A30
COL options FOR a11
COL object_name FOR a11
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 114/131
Reproduction interdite
/* Requte qui permet de Visualiser le rsultat */
SELECT LPAD( ' ', 2*(level-1))||operation, options,
object_name, position
FROM plan_table
START WITH id = 0 AND statement_id = '00'
CONNECT BY PRIOR id = parent_id AND statement_id = '00'
;
Exemple danalyse de requte SQL sous sqlplus.
SQL> @plan_tab.sql
Table truncated.
SQL> EXPLAIN PLAN
2 SET statement_id = '00'
3 INTO PLAN_TABLE
4 FOR
5 SELECT * FROM vi n, l i gne_commande /* Requte analyser */
6 WHERE l i gne_commande. i d_vi n = vi n. i d_vi n
7 ;
Explained.
SQL> SET ECHO OFF
/* Requte qui interroge la table PLAN_TABLE pour visualiser le rsultat
*/
OPERATION OPTIONS OBJECT_NAME POSITION
--------------------
----------
----------- ----------- ----------
SELECT STATEMENT
NESTED LOOPS 1
TABLE ACCESS FULL LIGNE_COMMANDE 1
TABLE ACCESS BY ROWID VIN 2
INDEX UNIQUE SCAN VIN_I01 1
On saperoit quon parcourt dabord toutes les lignes de la table
LIGNE_COMMANDE sans index, puis on parcourt la table VIN, avec lindex
VIN_I01.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 115/131
Reproduction interdite
Si on change lordre des tables dans la requte Sql le plan dexcution
devient alors:
SELECT * FROM LI GNE_COMMANDE, vi n /* Requte analyser */
WHERE LI GNE_COMMANDE. i d_vi n = vi n. i d_vi n
OPERATION OPTIONS OBJECT_NAME POSITION
--------------------
----------
----------- ----------- ----------
SELECT STATEMENT
NESTED LOOPS 1
TABLE ACCESS FULL VIN 1
TABLE ACCESS BY ROWID LIGNE_COMMANDE 2
INDEX RANGE SCAN LIGNE_COMMANDE_I2 1
On parcourt dabord la table VIN, puis on parcourt la table LIGNE_COMMANDE
avec lindex LIGNE_COMMANDE_I2.
Remarque : lindex VIN_I01 porte sur la colonne id_vin de la table vins,
lindex LIGNE_COMMANDE _I2 porte sur la colonne id_vin de la table
LIGNE_COMMANDE.
Autre exemple de requte analyser.
SELECT * FROM acheteurs, vin, LIGNE_COMMANDE
WHERE LIGNE_COMMANDE.id_vin = vin.id_vin
AND LIGNE_COMMANDE.id_client=client.id_client
AND LIGNE_COMMANDE.id_vin > :val /* Lors de lanalyse la valeur na pas
dimportance */
OPERATION OPTIONS OBJECT_NAME POSITION
------------------
---------
----------- ----------- ----------
SELECT STATEMENT
NESTED LOOPS 1
NESTED LOOPS 1
TABLE ACCESS BY ROWID LIGNE_COMMANDE 1
INDEX RANGE SCAN LIGNE_COMMANDE
_I2
1
TABLE ACCESS BY ROWID VIN 2
INDEX UNIQUE SCAN VIN_I01 1
TABLE ACCESS BY ROWID CLIENT 2
INDEX UNIQUE SCAN CLIENT_I01 1
Ici Oracle utilise un index par table, lordre des tables dans la clause
from ,na pas dimportance.
Remarque : Lindex CLIENT_I01 porte sur la colonne id_client de la table
CLIENT.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 116/131
Reproduction interdite
Annexe
Annexe 1 : Description de la table PLAN_TABLE
$ORACLE_HOME/rdbms/admin/utlxplan.sql
CREATE TABLE PLAN_TABLE (
statement_id VARCHAR2(30),
timestamp DATE,
remarks VARCHAR2(80),
operation VARCHAR2(30),
options VARCHAR2(30),
object_node VARCHAR2(128),
object_owner VARCHAR2(30),
object_name VARCHAR2(30),
object_instance NUMERIC,
object_type VARCHAR2(30),
optimizer VARCHAR2(255),
search_columns NUMERIC,
id NUMERIC,
parent_id NUMERIC,
position NUMERIC,
other LONG);
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 117/131
Reproduction interdite
Annexe 2 : Script de cration de la base de TP
-- ============================================================
-- Nom de la base : TP_Vins
-- Nom de SGBD : ORACLE Version 7.x
-- Date de cration : 22/09/98 11:26
-- ============================================================
drop table Ligne_Commande cascade constraints
/
drop table Vin cascade constraints
/
drop table Commande cascade constraints
/
drop table Viticulteur cascade constraints
/
drop table Client cascade constraints
/
drop table Client_old cascade constraints
/
-- ============================================================
-- Table : Client
-- ============================================================
create table client
(
Id_Client NUMBER(8) not null,
Nom VARCHAR2(25) not null,
Prenom VARCHAR2(25) null ,
Adresse_1 VARCHAR2(25) null ,
Adresse_2 VARCHAR2(25) null ,
Code_Postal VARCHAR2(5) null ,
Bureau_Distributeur VARCHAR2(20) null ,
EMail VARCHAR2(50) null ,
Type_Client NUMBER(1) null
constraint CKC_TYPE_CLIENT_CLIENT check (Type_Client is null or
(Type_Client in (0,1))),
constraint PK_CLIENT primary key (Id_Client)
)
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 118/131
Reproduction interdite
-- ==============================================
-- Table: Client_old
-- ==============================================
create table client_old
(
Id_Client NUMBER(8) not null,
Nom VARCHAR2(25) not null,
Prenom VARCHAR2(25) null ,
Adresse_1 VARCHAR2(25) null ,
Adresse_2 VARCHAR2(25) null ,
Code_Postal VARCHAR2(5) null ,
Bureau_Distributeur VARCHAR2(20) null ,
EMail VARCHAR2(50) null ,
Type_Client NUMBER(1) null
constraint CKC_TYPE_CLIENT_old_CLIENT_old check (Type_Client is null or
(Type_Client in (0,1))),
constraint PK_CLIENT_old primary key (Id_Client)
)
/
-- ============================================================
-- Table : Viticulteur
-- ============================================================
create table Viticulteur
(
Id_Viticulteur NUMBER(8) not null,
Nom VARCHAR2(25) not null,
Prenom VARCHAR2(25) null ,
Adresse_1 VARCHAR2(25) null ,
Adresse_2 VARCHAR2(25) null ,
Code_Postal VARCHAR2(5) null ,
Bureau_Distributeur VARCHAR2(20) null ,
EMail VARCHAR2(50) null ,
constraint PK_VITICULTEUR primary key (Id_Viticulteur)
)
/
-- ============================================================
-- Table : Commande
-- ============================================================
create table Commande
(
No_Commande NUMBER(8) not null,
Id_Client NUMBER(8) not null,
Date_commande DATE not null,
Cdts_Paiement NUMBER(1) null
constraint CKC_CDTS_PAIEMENT_COMMANDE
check (Cdts_Paiement is null or (Cdts_Paiement in (1,2,3,4))),
Mode_Paiement NUMBER(1) null
constraint CKC_MODE_PAIEMENT_COMMANDE
check (Mode_Paiement is null or (Mode_Paiement in (1,2,3))),
constraint PK_COMMANDE primary key (No_Commande),
constraint CKC_Id_Client_COMMANDE FOREIGN KEY(Id_Client) references
Client(Id_Client)
)
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 119/131
Reproduction interdite
-- ============================================================
-- Index : Commander_FK
-- ============================================================
create index Commander_FK on Commande (Id_Client asc)
/
-- ============================================================
-- Table : Vin
-- ============================================================
create table Vin
(
Id_Vin NUMBER(8) not null,
Id_Viticulteur NUMBER(8) not null,
Nom VARCHAR2(25) not null,
Millesime VARCHAR2(4) null ,
Cru VARCHAR2(20) null ,
Region VARCHAR2(15) null ,
Couleur NUMBER(1) null
constraint CKC_COULEUR_VIN check (Couleur is null or (Couleur in
(0,1,2))),
Cepage VARCHAR2(20) null ,
Prix_Achat NUMBER(8,2) null ,
constraint PK_VIN primary key (Id_Vin),
constraint CKC_Id_Viticulteur_Vin FOREIGN KEY(Id_Viticulteur) references
viticulteur(Id_viticulteur)
)
/
-- ============================================================
-- Index : Cultiver_FK
-- ============================================================
create index Cultiver_FK on Vin (Id_Viticulteur asc)
/
-- ============================================================
-- Table : Ligne_Commande
-- ============================================================
create table Ligne_Commande
(
No_Commande NUMBER(8) not null,
No_Ligne NUMBER(8) not null,
Id_Vin NUMBER(8) not null,
Quantite INTEGER not null,
constraint PK_LIGNE_COMMANDE primary key (No_Commande, No_Ligne),
constraint CKC_No_COMMANDE_COMMANDE FOREIGN KEY(No_commande) references
commande(no_commande))
/
-- ============================================================
-- Index : Acheter_FK
-- ============================================================
create index Acheter_FK on Ligne_Commande (Id_Vin asc)
/
-- ============================================================
-- Index : Commande_Ligne_FK
-- ============================================================
create index Commande_Ligne_FK on Ligne_Commande (No_Commande asc)
/
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 120/131
Reproduction interdite
Annexe 3 : Contenu des tables du TP
================================
-- Table client
================================
id_client nom prenom adresse_1 code_post
al
bureau_distribu
teur
1 KIESSE JACQUES KER KRADET 56000 VANNES
10 MADEK SERGE 4 rue du bois 44350 GUERANDE
12 AURELE MARC 15 av du
commandant
mouchotte
75014 PARIS
15 KIROULE PIERRE 1 rue du chteau 78000 VERSAILLES
25 DURAND JOSETTE 3 PL du PILORI 33170 GRADIGNAN
30 MARECHAL GINETTE le puisperdu 44000
35 SREGO LOUIS 7 rue de la mer 17000 LA ROCHELLE
======================
-- Table viticulteur
======================
Id_Viticulteur nom prenom
1 dupont jean
2 durand robert
3 leblanc jacques
4 de rougon adalbert
5 rougemont noemie
6 le floa_ch yann
7 lambert gerard
8 schneidert schilberique
9 rotschild edmon
10 margot ladislas
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 121/131
Reproduction interdite
======================
-- Table vin
======================
id_vin Id_Viticulteur millesime nom Prix_achat
1 1 1975 saint emilion
2 6 1971 mercurey 1500
3 9 1980 chablis 315
4 10 1976 santanay 310
5 8 1980 julienas
6 7 1976 graves 230
7 5 1979 cahors
8 4 1980 gros plant
9 3 1979 riesling
10 2 1976 morgon 150
================================
-- Table commande
==================================
no_commande id_client date_commande
1 5 01/05/98
2 6 02/04/98
3 1 01/10/97
4 8 14/02/96
================================
-- Table ligne de commande
================================
no_commande no_ligne id_vin quantite
1 1 5 10
1 2 7 9
2 1 4 15
2 2 6 4
2 3 1 11
3 1 4 5
4 1 2 18
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 122/131
Reproduction interdite
Annexe 4 : Rappels de syntaxe
INSERT INSERT INTO [schema.]{table | view}[@dblink]
[ (column [, column] ...) ]
{VALUES (expr [, expr] ...) | subquery} ;
UPDATE UPDATE [schema.]{table | view}[@dblink] [alias]
SET { (column [, column] ...) = (subquery)
| column = { expr | (subquery) } }
[, { (column [, column] ...) = (subquery)
| column = { expr | (subquery) } } ] ...
[WHERE condition] ;
DELETE DELETE [FROM] [schema.]{table | view}[@dblink] [alias]
[WHERE condition] ;
SELECT SELECT [DISTINCT | ALL]
{ * | { [schema.]{table | view | snapshot}.*
| expr } [ [AS] c_alias ]
[, { [schema.]{table | view | snapshot}.*
| expr } [ [AS] c_alias ] ] ... }
FROM [schema.]{table | view | snapshot}[@dblink] [t_alias]
[, [schema.]{table | view | snapshot}[@dblink] [t_alias] ]
...
[WHERE condition ]
[ [START WITH condition] CONNECT BY condition]
[GROUP BY expr [, expr] ... [HAVING condition] ]
[{UNION | UNION ALL | INTERSECT | MINUS} SELECT command ]
[ORDER BY {expr|position} [ASC | DESC]
[, {expr|position} [ASC | DESC]] ...]
[FOR UPDATE [OF [[schema.]{table | view}.]column
[, [[schema.]{table | view}.]column] ...] [NOWAIT] ] ;
COMMIT COMMIT [WORK]
[ COMMENT text
| FORCE text [, integer] ] ;
ROLLBACK ROLLBACK [WORK]
[ TO [SAVEPOINT] savepoint
| FORCE text ] ;
SAVEPOINT SAVEPOINT savepoint ;
SET TRANSACTION SET TRANSACTION
{ READ ONLY
| READ WRITE
| USE ROLLBACK SEGMENT rollback_segment } ;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 123/131
Reproduction interdite
CREATE PROCEDURE CREATE [OR REPLACE] PROCEDURE [schema.]procedure
[ (argument [IN | OUT | IN OUT] datatype
[, argument [IN | OUT | IN OUT] datatype] ...)]
{IS | AS} pl/sql_subprogram_body
CREATE FUNCTION CREATE [OR REPLACE] FUNCTION [schema.]function
[ (argument [IN] datatype
[, argument [IN] datatype] ...)]
RETURN datatype
{IS | AS} pl/sql_subprogram_body
CREATE PACKAGE CREATE [OR REPLACE] PACKAGE [schema.]package
{IS | AS} pl/sql_package_spec
CREATE PACKAGE
BODY
CREATE [OR REPLACE] PACKAGE BODY [schema.]package
{IS | AS} pl/sql_package_body
CREATE VIEW CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW [schema.]view
[(alias [,alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
ALTER PROCEDURE ALTER PROCEDURE [schema.]procedure
COMPILE ;
ALTER FUNCTION ALTER FUNCTION [schema.]function
COMPILE ;
ALTER PACKAGE ALTER PACKAGE [schema.]package
COMPILE [PACKAGE | BODY] ;
ALTER VIEW ALTER VIEW [schema.]view
COMPILE ;
DROP PROCEDURE DROP PROCEDURE [schema.]procedure ;
DROP FUNCTION DROP FUNCTION [schema.]function ;
DROP PACKAGE DROP PACKAGE [BODY] [schema.]package ;
DROP VIEW DROP VIEW [schema.]view ;
CREATE TRIGGER CREATE [OR REPLACE] TRIGGER [schema.]trigger
{BEFORE | AFTER}
{DELETE | INSERT | UPDATE [OF column [, column] ...]}
[OR {DELETE | INSERT | UPDATE [OF column [, column] ...]}]
...
ON [schema.]table
[ [REFERENCING { OLD [AS] old [NEW [AS] new]
| NEW [AS] new [OLD [AS] old] } ]
FOR EACH ROW
[WHEN (condition)] ]
pl/sql_block
DROP TRIGGER DROP TRIGGER [schema.]trigger ;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 124/131
Reproduction interdite
CREATE TABLE CREATE TABLE [schema.]table
( { column datatype [DEFAULT expr]
[column_constraint] ...
| table_constraint}
[, { column datatype [DEFAULT
expr] [column_constraint] ...
| table_constraint} ]...)
[ [PCTFREE integer] [PCTUSED integer]
[INITRANS integer] [MAXTRANS integer]
[TABLESPACE tablespace]
[STORAGE storage_clause]
[ PARALLEL ( [ DEGREE { integer | DEFAULT } ]
[ INSTANCES { integer | DEFAULT } ]
)
| NOPARALLEL ]
[ CACHE | NOCACHE ]
| [CLUSTER cluster (column [, column]...)] ]
[ ENABLE enable_clause
| DISABLE disable_clause ] ...
[AS subquery] ;
CREATE INDEX CREATE INDEX [schema.]index
ON { [schema.]table (column [ASC|DESC][, column
[ASC|DESC]] ...)
| CLUSTER [schema.]cluster }
[INITRANS integer] [MAXTRANS integer]
[TABLESPACE tablespace]
[STORAGE storage_clause]
[PARALLEL ( [DEGREE { integer | DEFAULT }]
[INSTANCES {integer | DEFAULT }]
)
| NOPARALLEL ]
[PCTFREE integer]
[NOSORT] ;
CREATE SEQUENCE CREATE SEQUENCE [schema.]sequence
[INCREMENT BY integer]
[START WITH integer]
[MAXVALUE integer | NOMAXVALUE]
[MINVALUE integer | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE integer | NOCACHE]
[ORDER | NOORDER] ;
CREATE SYNONYM CREATE [PUBLIC] SYNONYM [schema.]synonym
FOR [schema.]object[@dblink] ;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 125/131
Reproduction interdite
ALTER TABLE ALTER TABLE [schema.]table
ADD {
{ column datatype [DEFAULT expr]
[column_constraint] ... | table_constraint}
| ( { column datatype [DEFAULT expr]
[column_constraint] ... | table_constraint}
[, { column datatype [DEFAULT expr]
[column_constraint] ... | table_constraint} ] ... ) } ]
[MODIFY { column [datatype] [DEFAULT expr]
[column_constraint] ...
| (column [datatype] [DEFAULT expr]
[column_constraint] ...
[, column datatype [DEFAULT expr]
[column_constraint] ...] ...) } ]
[PCTFREE integer] [PCTUSED integer]
[INITRANS integer] [MAXTRANS integer]
[STORAGE storage_clause]
[DROP drop_clause] ...
[ALLOCATE EXTENT [( [SIZE integer [K|M] ]
[DATAFILE 'filename']
[INSTANCE integer] )]
[ PARALLEL ( [ DEGREE { integer | DEFAULT } ]
[ INSTANCES { integer | DEFAULT } ]
) | NOPARALLEL ]
[ CACHE | NOCACHE ]
[ ENABLE enable_clause | DISABLE disable_clause ] ... ;
ALTER INDEX ALTER INDEX [schema.]index
[INITRANS integer] [MAXTRANS integer]
[STORAGE storage_clause] ;
ALTER SEQUENCE ALTER SEQUENCE [schema.]sequence
[INCREMENT BY integer]
[MAXVALUE integer | NOMAXVALUE]
[MINVALUE integer | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE integer | NOCACHE]
[ORDER | NOORDER] ;
DROP TABLE DROP TABLE [schema.]table
[CASCADE CONSTRAINTS] ;
DROP INDEX DROP INDEX [schema.]index ;
DROP SEQUENCE DROP INDEX [schema.]index ;
DROP SYNONYM DROP [PUBLIC] SYNONYM [schema.]synonym ;
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 126/131
Reproduction interdite
Exercices
Description du contexte de l'exercice
Contexte fonctionnel :
Extrait d'une application 'Achat', dcrivant les fournisseurs et les acheteurs chargs de grer ces fournisseurs.
Description des tables :
==================
== Table ach (acheteurs)
==================
CODACH VARCHAR2(2) Code achat
DESACH VARCHAR2(8) Dsignation de l'acheteur
NUMDEP NUMBER(2) Numro de dpartement
==================
== Table four (fournisseurs)
==================
CODFOU NOT NULL NUMBER(3) Code du fournisseur
NOMFOU VARCHAR2(10) Nom du fournisseur
STAFOU NUMBER(1) Etat du fournisseur (1 4)
MERFOU NUMBER(3) Code fournisseur de la
socit mre
CUMCOM NUMBER(8,2) Cumul annuel des commandes
CUMREC NUMBER(8,2) Cumul annuel des rceptions
DATCOM DATE Date de la dernire commande
CODACH VARCHAR2(2) Code Acheteur
Les diffrents tats du fournisseur sont :
1 Futur
2 Actif
3 Suspendu
4 Abandonn
gre
FOUR ACH
gre
0,n 0,1
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 127/131
Reproduction interdite
Contenu des tables
==================
== Table ach (acheteurs)
==================
CODACH DESACH NUMDEP
A1 DUBOURG 33
A2 ROLAND 40
A3 MARTINET 17
A4 FILLOL 64
==================
== Table four (fournisseurs)
==================
CODFOU NOMFOU STAFOU MERFOU CUMCOM CUMREC DATCOM CODACH
321 LOPES 2 923 13800,00 11000,00 18/05/89 A2
334 GPR 2 413 25000,00 04/09/89 A1
331 DUPIN 4 413 43230,00 43230,00 19/06/89 A3
413 SLT 1 A1
424 DIAL 3 612 75600,00 60400,00 04/04/89 A3
451 AILEC 4 15/06/86 A3
453 VERGNES 4 612 05/03/88 A1
513 REY 1 334 A3
525 FORCLUM 2 145000,00 130000,00 05/10/89 A2
612 EGL 2 39650,00 39650,00 16/07/89 A2
781 COSSET 1 A1
911 MILLOT 3 334 218700,00 218700,00 21/08/89 A2
923 SICSO 2 413 27300,00 0 03/10/89 A2
941 FARON 2 424 1800,00 1800,00 17/05/89 A1
Enonc des exercices
R1.1
Afficher le nom des fournisseurs futurs et actifs grs par l'acheteur de code 'A2'. Classer le rsultat par ordre
alphabtique.
R1.2
Afficher le contenu de la table des fournisseurs futurs, actifs et suspendus dont les dates de commande sont
de l'anne 1989.
R1.3
Afficher le contenu de la table des fournisseurs dont les noms contiennent un L ou un E.
R1.4
Afficher le contenu de la table des fournisseurs dont le cumul des rceptions est non nul et qui ont eu des
commandes en 1989.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 128/131
Reproduction interdite
R1.5
Afficher le code acheteur, l'tat, le nom, le code du fournisseur, la date de commande tri par code acheteur,
tat et date de commande.
R2.1
Afficher les lignes distinctes de la table fournisseur gr par un acheteur du dpartement 33.
R2.2
Afficher les code et nom des fournisseurs et si elle existe, la dsignation des acheteurs qui ont effectu un
achat avec ces fournisseurs.
R2.3
Afficher les codes des acheteurs qui n'ont gr aucun achat avec un fournisseur.
R2.4
Afficher les diffrents code et nom des fournisseurs et de leur socit mre.
R2.5
Afficher les nom, tat et cumul des commandes de tous les fournisseurs qui ont effectu plus de commandes
dans l'anne que le fournisseur qui s'appelle EGN.
R3.1
Afficher les code et nom des fournisseurs abandonns qui n'ont pas eu de commandes en 1989.
R3.2
Afficher le nom des fournisseurs et s'ils existent les noms des acheteurs qui grent ces fournisseurs
R3.3
Afficher l'intersection entre les codes acheteurs qui grent des fournisseurs et la liste de tous les acheteurs.
R3.4
Afficher le nom de tous les fournisseurs qui ne sont pas des socits mres en utilisant la commande MINUS.
R4.1
Afficher les code et nom des fournisseurs qui sont grs par l'acheteur qui gre le fournisseur FORCLUM. Faire
en sorte que le fournisseur FORCLUM n'apparaisse pas dans la liste de rsultats.
R4.2
Afficher le nom des fournisseurs qui sont dans le mme tat que le fournisseur LOPES et qui sont grs par le
mme acheteur que le fournisseur LOPES.
R4.3
Afficher les code, nom, code de la socit mre des fournisseurs grs par un acheteur du dpartement 33 et
dont la socit mre est celle du fournisseur 'SICSO'.
R4.4
Afficher les diffrents code et nom des fournisseurs socit mre qui sont grs par le mme acheteur que leur
socit fille.
R4.5
Afficher les noms des fournisseurs qui sont grs par des acheteurs qui grent les fournisseurs futurs.
R4.6
Afficher le nom des fournisseurs qui sont grs par l'acheteur de code 'A2' et dont la socit mre est gre par
l' acheteur MARTINET.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 129/131
Reproduction interdite
R4.7
Afficher le nom des fournisseurs dont le cumul annuel des commandes est suprieur celui des fournisseurs
grs par l'acheteur de code A3 et dont les commandes ont t effectues en 1989.
R5.1
Afficher les code, nom des fournisseurs ainsi que la diffrence entre leur cumul des commandes et leur cumul
des rceptions. Nommer la colonne rsultante du calcul "solde".
Faire en sorte que le rsultat soit correct mme pour les fournisseurs dont les cumuls ne sont pas valoriss
(NULL).
R5.2
Afficher les code et tat des fournisseurs. L'tat des fournisseurs doit apparatre sous forme d'un libell en clair
(futur, actif, suspendu, autre).
R5.3
Afficher le nom des fournisseurs ainsi que leur cumul annuel de commande sous le nom "total commandes"
tri par cumul de commande dcroissant.
R5.4
Afficher les code et nom des fournisseurs dont le cumul des rceptions est infrieur 10% du cumul des
commandes.
R5.5
Afficher les code et nom des fournisseurs ainsi que leur cumul des commandes arrondis 2 chiffres aprs la
virgule.
R5.6
Afficher le nom des fournisseurs et le nombre de mois entre leur dernire commande et le 31 dcembre 1989
tri par nombre de mois dgressif.
R6.1
Afficher moyenne des cumuls annuels des commandes des fournisseurs.
R6.2
Afficher le total des cumuls de commande gres par l'acheteur A1
R6.3
Afficher les code, nom, cumul des commandes du fournisseur qui a effectu le plus fort chiffre de commandes.
R6.4
Afficher le nombre de fournisseurs grs par l'acheteur A2
R6.5
Afficher par acheteur, le code acheteur et leur moyenne de cumul de commande.
R6.6
Afficher par acheteur, les code acheteur et le nombre de fournisseurs qu'il gre.
R6.7
Afficher les code, nom, cumul des commandes, acheteur des fournisseurs dont le cumul des commandes est
le plus fort cumul des commandes par acheteur.
R6.8
Afficher par acheteur, le code acheteur et le nombre d'tats de fournisseurs actifs dont le nombre d'tats de
fournisseurs est strictement suprieur 3.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 130/131
Reproduction interdite
R7.1
Mettre zro le cumul des commandes et des rceptions pour les fournisseurs abandonns. Vrifier le rsultat
par un SELECT avant d'annuler la mise jour par un ROLLBACK.
R7.2
Crer la table FUTUR avec les attributs : code fournisseur, nom du fournisseur, socit mre et code acheteur.
Puis insrer dans cette table les informations correspondantes de la table FOUR pour les fournisseurs futurs.
R7.3
Supprimer tous les fournisseurs abandonns. Vrifier le rsultat puis annuler la suppression.
R8.1
Ajouter l'attribut 'SOLDE' la table FOUR. Charger la nouvelle colonne pour chaque fournisseur partir du
cumul des commandes diminu du cumul des rceptions.
R8.2
Accrotre la table de NOMFOU 10 caractres.
R9.1
Traitement de fin d'anne 89 pour le fournisseur 321 :
- ne rien faire s'il n'est pas actif ( signaler simplement en faisant apparatre son nom et son tat )
- s'il est actif et que sa dernire commande est antrieure 89, le transformer en client suspendu.
- S'il est actif avec des commandes en 89 : mettre zro ses cumuls de commande et de
rception.
R9.2
Traitement de fin d'anne 89 pour tous les fournisseurs : mme traitement qu'en 9.1
R9.3
Extraire les code et nom des fournisseurs ayant reu les n commandes les plus rcentes. ( n en paramtre)
R9.4
Intgrer la table des acheteurs un cumul gnral des commandes par acheteur CUMGCOM et le valoriser
partir de la table des fournisseurs.
Formation Syntegra ORACLE/SQL
Version 1.1 22/05/00 Page 131/131
Reproduction interdite
Corrig des exercices