Vous êtes sur la page 1sur 79

Direction Gnrale Institut Suprieur des

Des Etudes Technologiques Etudes


******** DGET ******* Technologiques du Kef




























Niveau : Quatrime niveau en Informatique
Option : Informatique de gestion, Rseaux informatique
Version : 1.0


Support de cours
SGBD


Ralis par :

BOUKCHIM Mosaab
(AT-Iset de Kef)
HOSNI Anis
(AT-Iset de Kef)
PLAN


Chapitre 1 : Introduction aux bases de donnes................................... 4
1-Introduction.........................................................................4
2-Dfinitions...........................................................................4
3-Architecture ANSI/SPARC dun SGBD : ...........................4
4-Historique des SGBD.........................................................5
5-Proprits des bases de donnes relationnels ...............5
Chapitre 2 : Installation de Oracle 9i ................................................... 7
1-Objectifs ..............................................................................7
2-Ressources .........................................................................7
3-Cration d'une premire base de donnes....................12
4-Configuration de la connectique.....................................19
5-Ma premire connexion ...................................................29
Chapitre 3 : SQL..................................................................................30
1- Interrogation : lordre SELCT .........................................30
2- Les jointures : ..................................................................30
2.1 Lquijointure :........................................................................................................... 31
2.2 La non quijointure : .................................................................................................. 31
2.3 Autojointure : ............................................................................................................. 31
2.4 Jointure externe : ........................................................................................................ 31
3- Les fonctions de groupe.................................................32
3.1 Objectifs: .................................................................................................................... 32
3.2 Dfinitions :................................................................................................................ 32
3.3 Quelques fonctions de groupe : .................................................................................. 32
3.4 Exemples dutilisation de AVG,SUM,MAX,MIN : .................................................. 33
3.5 Utilisation de la fonction COUNT : ........................................................................... 33
3.6 Utilisation de la fonction NVL :................................................................................ 34
3.7 Cration de groupe de donnes , la clause GROUP BY : ......................................... 34
3.8.Restriction de groupes, HAVING.............................................................................. 35
4- Les sous interrogations..................................................35
4.1 Sous-interrogation ramenant une seule valeur (monoligne) ...................................... 35
4.2 Sous-interrogation ramenant plusieurs lignes (multiligne) ........................................ 35
4.3 Sous-interrogation ramenant plusieurs colonnes (multicolonnes) ............................. 36
4.4Sous-interrogation synchronise avec l'interrogation principale ................................ 36
4.5 Sous-interrogations multiples..................................................................................... 37
5- Les oprateurs ensemblistes :.......................................38
5.1 Objectifs : ................................................................................................................... 38
5.2 Oprateur UNION...................................................................................................... 38
5.3 Oprateur INTERSECT ............................................................................................. 39
5.4 Oprateur MINUS...................................................................................................... 39
5.5 Oprateur UNION ALL : ........................................................................................... 39
5.6 Remarques :................................................................................................................ 39
6- Langage de manipulation de donnes LMD .................40
6.1 Dfinition ................................................................................................................... 40
6.2 Ajout de lignes :INSERT ........................................................................................... 40
6.3 Modification de lignes : UPDATE............................................................................. 40
6.4 Suppression de lignes : DELETE............................................................................... 41
7- Lanagae de dfinition de donnes LDD........................41
7.1 Les types de donnes en SQL .................................................................................... 41
7.2 Les contraintes............................................................................................................ 42
7.3 Lordre CREATE Table :pour la cration dune table............................................... 42
7.4 Lorder ALTER TABLE :.......................................................................................... 43
8. Langage de contrle de donnes LCD..........................44
8.1 Les transactions dans SQL : COMMIT et ROLLBACK........................................... 44
Chapitre 4 : La langage PL/SQL ........................................................45
1- Introduction......................................................................45
2- Structure dun bloc PL/SQL............................................45
3- Les dclarations PL/SQL ................................................46
3.1 Types de donnes ....................................................................................................... 46
3.2 Variables et constantes ............................................................................................... 47
3.2.1. La dfinition des variables en PL/SQL.............................................................. 47
3.4. Les enregistrements prdfinis (record PL/SQL)...................................................... 48
3.4.1 La dclaration d'un enregistrement ..................................................................... 48
3.4.2 L'accs aux champs d'un enregistrement............................................................. 48
4-Structure de controle .......................................................49
4.1. Les traitements Conditionnels................................................................................... 49
4.2 Les Traitements.Rptitifs ......................................................................................... 50
4.2.1. linstruction LOOP............................................................................................. 50
4.2.2. L'instruction FOR LOOP ............................................................................... 50
5. LES CURSEURS EN PL/SQL...........................................51
5.1. Dfinition .................................................................................................................. 51
5.2. Les types de curseurs................................................................................................. 51
5.3. Les tapes d'utilisation d'un curseur explicite ........................................................... 51
5.3.1. La dclaration d'un curseur ................................................................................ 51
5.3.2. L'ouverture et la fermeture dun curseur ............................................................ 51
5.3.3. Le traitement des lignes...................................................................................... 52
5.4 Les attributs dun curseur........................................................................................... 53
5.4.1 lattribut %Found ................................................................................................ 53
5.4.2. L'attribut %NotFound......................................................................................... 54
5.4.3. L'attribut %IsOpen ............................................................................................. 55
5.4.4.'L'attribut %RowCount........................................................................................ 55
5.4.5. L'attribut %Rowtype .......................................................................................... 56
5.5. Les boucles et les curseurs ........................................................................................ 56
5.6. Le curseur paramtr................................................................................................. 57
5.7. La clause "current of"............................................................................................ 58
6 Utilisation de sous-programmes.....................................58
6.1 Dclaration dune procdure ...................................................................................... 58
6.2 Dclaration dune fonction......................................................................................... 59
7. GESTION DES ERREURS................................................60
7.1. Les exceptions internes ............................................................................................. 60
7.2. Les exceptions utilisateur (externes) ......................................................................... 62
Annexe1 : Complment de cours : les fonctions .................................63
1- Expressions et fonctions arithmtiques .......................63
1.1 Oprateurs arithmtiques............................................................................................ 63
1.2 Priorit des oprateurs................................................................................................ 63
1.3 Fonctions arithmtiques ............................................................................................. 63
2- Expressions et fonctions sur les chanes de caractres
...............................................................................................64
2.1 Oprateur sur les chanes de caractres...................................................................... 64
2.2 Fonctions sur les chanes de caractres ...................................................................... 65
3- Expressions et fonctions sur les dates.........................66
3.1 Oprateurs sur les dates.............................................................................................. 66
3.2 Fonctions sur les dates................................................................................................ 66
SYSDATE.................................................................................................................... 66
4- Fonctions de conversion................................................66
5- Autres fonctions..............................................................68
LEAST ......................................................................................................................... 68
Annexe 2 : Gestion des utilisateurs et des privilges..........................69
I-Gestion des utilisateurs :..................................................69
1-Cration dun utilisateur : ............................................................................................. 69
2-Modification dun utilisateur : ...................................................................................... 70
3-Suppression dun utilisateur.......................................................................................... 70
II-Gestion des privilges : ...................................................70
1-Gestion des privilges au niveau systme :................................................................... 70
a-Attribution dun privilge: ........................................................................................ 70
b-Suppression dun systme :....................................................................................... 71
c-Exemple de privilge systme :................................................................................. 71
2-Gestion de privilges objets .......................................................................................... 71
a-Attribution de privilges : ......................................................................................... 71
b-suppression de privilge :.......................................................................................... 71
c-exemple de privilges objets ..................................................................................... 71
Annexe 3 : Gestion dune base de donnes .........................................72
1- Cration dune base de donnes: ..................................72
2- Dmarrage de la base : ...................................................73
3- Arrt de la base : .............................................................73





Prsentation du cours

Ce cours sintitule SGBD . Il est destin aux tudiants du quatrime niveau option Rseaux
Informatiques et Informatique de gestion au sein des Instituts suprieurs des tudes
technologiques.

Pr requis :
Ces tudiants ont dj vu le cours fichiers et base de donnes en deuxime niveau. Donc,
plusieurs dfinitions et termes ne leur sont pas trange, ainsi que la conception dune base de
donne en utilisant MERISE. Leurs travaux pratiques ont t ralis avec Microsoft Access.

Objectif gnral :
Comprendre :
- les concepts des bases de donnes
- lutilit de leur utilisation
- matriser linterrogation, la manipulation et la gestion dune base de donnes


Objectifs spcifiques :
Objectifs spcifiques Elments de contenu
Avoir une ide sur lvolution des SGBD. Dfinition de BD
Dfinition de SGBD
Architecture ANSI/SPARC
Les trois gnrations des SGBD
Bien saisir les contraintes sur les tables et leur
utilit autant que rgles de gestion.
PRIMARY KEY
FOREIGN KEY
UNIQUE
CHECK
NOT NULL
Comment crer une base de donnes, ses
tables et comment les modifis (LDD de
SQL).
- CREATE DATABASE
- CREATE TABLE
- ALTER TABLE
Savoir interroger une BD en vue dextraire et
dafficher des informations spcifiques.
Lordre SELECT
Les fonctions de groupe
Les jointures
Les sous interrogations
Les oprateurs ensemblistes
Connatre les commandes ncessaires de mise
jour de donnes (LMD de SQL).
INSERT
UPDATE
DELETE
Se familiariser avec le langage PL/sql Les types de donnes
Les variables
Les structures conditionnels
Les structures rpetitives
Les blocs Pl/sql
Comprendre lutilit des procdures et
fonctions stocks.
CREATE PROCEDURE
CREATE FUNCTION
Saisir le rle des dclencheurs CREATE TRIGGER
Pouvoir crer et supprimer des utilisateurs CREATE USER
DROP USER
Grer les privilges objets et systmes GRANT
REVOKE
Savoir valider et annuler la mise jour de
donns
COMMIT
ROLLBACK

Pr-requis :
Windows, BD, Access.

Formule pdagogique :
Expos informel
Laboratoire

Moyens pdagogiques :
Tableau
Support de cours

Mthodologie :
Cours intgr
Travaux dirigs (ralisation et correction dexercices)
Travaux pratiques ( Oracle)

Evaluation :
Interrogations crites
Devoir surveill
Examens de travaux pratiques
Examen final

Volume Horaire :
22,5 heures de cours intgr
45 heures de travaux pratiques

Bibliographie

Oracle Corporation Documentation

NETG Documentation Skill Builder
Network Education Training Group


Pack OCP DBA Oracle 9i EXAM
Edition : Oracle Press

Les bases de donnes Oracle 8i
Dveloppement, administration ,optimisation
Auteur :Roger Chapuis
Edition DUNOD

Bases de donnes Objet et Relationnel
Auteur :Georges Gardarin
Edition EYROLLES


SGBD avancs : Bases de donnes objets, dductives, rparties.
Auteurs :G.Gardarin, P.valduriez
Edition EYROLLES

Netographie


www.developpez.com/cours/sql-Oracle
www.oracle.com
www.otn.com











Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 4/75
Chapitre 1 : Introduction aux bases de donnes

Introduction
Les bases de donnes ont pris aujourdhui une place essentielle dans linformatique, plus
particulirement en gestion .Au cours des 40 dernires annes : des concepts, mthodes et
algorithmes ont t dvelopps pour grer des donnes sur mmoires secondaires ; ils
constituent aujourdhui lessentiel de la discipline base de donnes .
1- Dfinitions
Une base de donnes est un ensemble de donnes modlisant les objets dune partie de monde
rel et servent de support une application informatique.
Un SGBD peut tre peru comme un ensemble de logiciels systmes permettant aux
utilisateurs dinsrer, de modifier et de rechercher efficacement des donnes spcifiques dans
une grande masse dinformations partage entre plusieurs utilisateurs.
Un SGBD est un outil informatique qui permet la sauvegarde, linterrogation ,la recherche et
la mise en forme de donnes stockes sur mmoires secondaires. Ce sont des fonctions
premires, complts par des fonctions souvent plus complexes destins par exemple
assurer le partage de donnes mais aussi protger les donnes contre tout incident et
obtenir des performances acceptables.
3-Architecture ANSI/SPARC dun SGBD :

Figure 1 : Architecture ANSI/SPARC
Uns SGBD se compose de trois couches de fonctions embots, depuis les mmoires
auxiliaires vers les utilisateurs :
- La gestion des rcipients des donnes sur les mmoires secondaires constitue
traditionnellement la premire couche : le gestionnaire de fichiers, appel encore SGF.
Celui-ci fournit aux couches suprieurs des mmoires secondaires idales adressables
par objets et capable de recherche par le contenu des objets (mcanisme dindexation
notamment).
- La gestion des donnes stockes dans les fichiers, lassemblage de ces donnes en
objets, le placement de ces objets dans les fichiers, la gestion des liens entre objets et
la gestion de structures permettant dacclrer les accs aux objets constituent la
deuxime couche, cest le systme daccs aux donnes ou SGBD interne. Celui-ci
repose gnralement sur un modle de donnes interne, par exemple des tables relies
par des pointeurs.
- La fonction essentielle de la troisime couche consiste dans la mise en forme et les
prsentation des donnes aux programmes dapplication et aux utilisateurs interactifs
dune part et dautres part, lanalyse et linterprtation des requtes utilisateurs en
primitives interne.

Niveau externe
Niveau
conceptuel


Niveau
interne
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 5/75
4-Historique des SGBD
Lhistoire dun SGBD peut tre rsum en trois gnrations :
- La premire gnration sappuie sur les modles de donnes hirarchiques et rseau.
Elle vise tendre un systme de fichiers(lanctre des SGBD) par des possibilits de
liaisons inter fichiers matrialise par des pointeurs.
Un SGBD de premire gnration fournit une faible indpendance physique
compliquant ainsi ladministration et la manipulation des donnes.
En particulier, son langage de manipulation de donnes navigationel impose au
programmeur de spcifier laccs aux donnes en naviguant dans le graphe da la base.
- La deuxime gnration de SGBD est ne vers 1970 avec lapparition du modle de
donnes relationnel.
Une dizaine dannes defforts, de recherche et de dveloppement furent ncessaire
pour aboutir la commercialisation des premiers SGBD relationnels. Depuis la
technologie des bases de donnes relationnels a fait lobjet de progrs remarquables en
termes de facilit dusage et de performance.
Aujourdhui tout SGBD relationnel offre un ensemble intgr doutils bases sur un
langage de quatrime gnration afin daccroitre la productivit des utilisateurs. Aussi
certains systmes supportent efficacement les applications transactionnelles, trs
exigeantes en performances. En consquence, le march actuel des bases de donnes
est couvert en grande majorit par les SGBD relationnels.
La premire et deuxime gnration dSGBD on t conus pour les applications de gestion
classique, comme par exemple la gestion de stocks ou la comptabilit dune entreprise.
Ces SGBDs sont gnralement implants comme une couche externe dun systme opratoire
install sur un calculateur.
Deux tendances complmentaires rcentes soulignent les limites de ces systmes :
a-/ La premire est la manifestation de besoins pressants en gestion de donnes de la part
dapplications nouvelles tel que le bureautique, la conception assiste par ordinateur(CAO) et
le gnie logiciel qui se singularisent par rapport aux applications traditionnelles
b-/La seconde tendance est la diversit croissante des environnements informatiques
essentiellement dcentralise qui favorisent la rpartition et lhtrognit des donnes.
- la troisime gnration des SGBDs dsignent des systmes qui supportent bien ces
applications nouvelles ou exploitent des environnements oprationnels complexes
(rpartis, parallles ou htrognes).
Cette nouvelle gnration, initie dans quelques laboratoires de recherche vers la fin des
annes1970, fiat depuis ce temps lobjet de travaux de recherche et de dveloppement
intenses.
5-Proprits des bases de donnes relationnels

Le modle relationnel invent par Codd, peut tre introduit informellement par les trois
proprits suivantes :
a- Les structures de donnes sont simples et se construisent partir de la thorie des
ensembles. Ce sont des tables deux dimensions dont chaque lment appartient un
ensemble de valeurs appel domaine. Puisquelle dfinit une relation entre des domaines, une
telle table est appel aussi relation .Une colonne dune relation appel attribut est dfinie sur
un mme domaine. Une ligne dune relation appel n-uplet ou tuple, relie logiquement les
lments dinformations fournis par les valeurs dattributs.
Toute information de la base de donnes doit tre reprsente explicitement par des valeurs
dans des tables.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 6/75


b- Un ensemble doprateurs appliqus des relations, constituant lalgbre
relationnelle, permet la dfinition, la recherche et la mise jour des donnes. Chaque
oprateur prend une ou deux relations en arguments et produit une relation.
Lalgbre relationnelle comprend les oprateurs classiques de la thorie des ensembles(
produit cartsien, union, intersection, diffrence) et des oprateurs permettant de composer
des sous ensembles dune ou de relations(projection, restriction, jointure et division).


c-Un ensemble de contraintes smantiques dfinit les tats cohrents de la base de
donnes. Il existe au minimum deux contraintes dintgrit structurelles :

la premire est lunicit de cl, qui spcifie quun ou plusieurs
attributs constituent la cl unique dune relation. Par exemple ,NSS
est la cl unique de la relation Personne.
La seconde est la contrainte de rfrence, qui permet de garantir que
la valeur dune donne dans une relation est prsente dans une autre
relation.. Par exemple, un produit command , rfrenc dans la
relation commande doit exister aussi dans la relation produit.


Lavantage majeur dun SGBD relationnel est sa facult assur lindpendance complte
entre la description des donnes logiques( en termes relationnels) et physiques ( en termes de
fichiers et liaisons inter-fichiers). Cette indpendance a permis le dveloppement de langages
de dfinition et de manipulation de donnes de haut niveau appel langage de requtes, au
dessus de lalgbre relationnelle.
Ces langages sont typiquement assertionels, c'est--dire bas sur la logique des prdicats et
librent le programmeur de la spcification des chemins daccs aux donnes.
En consquence loptimisation des requtes de manipulation de donnes peut tre entirement
automatise. Lexistence du langage de requtes standard SQL [ANSI 86] contribue dailleurs
fortement la promotion du modle relationnel.
SQL fournit une interface uniforme aux administrateurs, programmeurs dapplications et
utilisateurs finals, pour la dfinition, le contrle et la manipulation des donnes. Un autre
avantage de cette indpendance physique est de fournir une base solide pour laide la
conception des schmas conceptuels et internes. Le plupart des SGBD commercialiss
supportent le langage SQL. De plus ils offrent gnralement un ensemble intgr doutils
L4G( gnrateur dapplications, grant de menu et de fentres, aide la conception de
schmas,..) qui facilite le dveloppement des applications base de donnes et amliore ainsi la
productivit des utilisateurs. La ralisation de ces outils a t facilite par la simplicit et la
puissance du modle relationnel.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 7/75
Chapitre 2 : Installation de Oracle 9i


1-Objectifs
Ce chapitre a pour unique but de donner ltudiant une mthode pour installer Oracle 9i pas-
-pas.

2-Ressources

Sachez avant tout que, comparativement ses concurrents, Oracle est extrmement gourmand
en ressources (mmoire et disque). Il est en effet trs difficile de dissocier le moteur SGBDR
des composants annexes, ceux-ci tant plus ou moins incorpors l'installation. Partant
installer un moteur SGBDR, vous vous trouverez sans vous en rendre compte avec un
environnement complet de dveloppement, un serveur applicatif Apache, un pare-feu, etc.
Exprience douloureuse faite, assurez-vous
* d'avoir des droits Administrateurs/root
* d'avoir install au pralable un JDK 1.1.3 sur la machine cible

Installation
Taille (sous
Windows)
Entreprise (version complte) 2.59 Go
Standard 2.46 Go
Personnelle (mono-utilisateur) 2.49 Go
Client administrateur 798 Mo
3-Installation du logiciel
Insrons le premier des 3 CDs.

Si l'autorun ne dmarre pas, lanons manuellement setup.exe
Cliquons ensuite sur Dmarrer l'installation ou, si vous n'en tes pas a votre premire
installation, sur Installer/Dsinstaller les produits
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 8/75


Remarquons que la langue utilise par l'Installer dpend de celle utilise par votre systme
d'exploitation.

Si une version Oracle n'est plus utile et existe encore, commencez par la supprimer via le
bouton Dsinstaller les produits. Sinon, bouton Suivant.

Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 9/75
C'est ici que nous dterminons la variable ORACLE_HOME, c'est--dire l'endroit physique
o le logiciel Oracle sera install. Choisissez d'emble un disque sur lequel il y a 3Go de libre
(hormis pour une installation pure cliente).

Choix du produit installer. Nous sommes intresss installer le serveur et son client sur
notre machine et choisissons donc la 1re option.
Notez le bouton Langue du produit

Si cel vous intresse, vous pouvez toujours ajouter un langage. Sinon, si l'anglais vous suffit,
vous pouvez allgrement sauter ce menu.
Passons maintenant au choix des produits installer
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 10/75

Choisissons l'installation standard afin de ne pas se priver du plaisir de configurer la couche
rseau

Dans son processus d'installation, Oracle inclut la cration de la 1re base. Par soucis de
clart, nous dissocierons ces 2 processus et excuterons cette tche dans le chapitre suivant.

Voici donc le rsum des options choisies
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 11/75

Si quelque chose vous semble inexacte, il est encore temps de revenir en arrire pour apporter
les corrections voulues.

Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 12/75
Et c'est parti : le temps d'une bonne pause caf...

... qui ne devrait pas vous faire oublier de changer les CDs !

Voil, c'est fini. Pendant tout ce temps, Oracle a mme pris le temps de configurer un serveur
http Apache.
Vous pouvez choisir le bouton Quitter.

L'installation du logiciel s'est apparemment bien droule.

3-Cration d'une premire base de donnes

Notons que pour l'instant, certains services ont t installes sous XP, mais aucun n'est
dmarr. Voici leur liste exhaustive:
Nom du service Status Startup Type
Oracle OLAP 9.0.1.0.1 Manual
Oracle OLAP Agent Manual
OraclOracle9iAgent Automatic
OracleOracle9iClientCache Manual
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 13/75
OracleOracle9iHTTPServer Automatic
OracleOracle9iPagingServer Manual
OracleOracle9iSNMPPeerEncapsulator Manual
OracleOracle9iSNMPPeerMasterAgent Manual
Pour dmarrer sans douleurs, nous allons crer notre premire base de donnes en utilisant
l'assistant : Menu Oracle - Oracle9i -> Configuration and Migration Tools -> Database
Configuration Assistant.

Nous voulons crer une base. Choisissons donc la 1re option.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 14/75
Pour permettre l'assistant de configurer la base de donnes le plus correctement possible, un
choix s'offre vous:

Si vous dcidez d'optimiser votre base pour l'utilisation de selects massifs sur de trs grosses
tables, au dtriment des modifications, choisissez l'option Datawarehouse
Choisissez Transaction Processing si votre environnement est ax sur des mise jour
nombreuses et concurrentes, avec un grand nombre d'utilisateurs.
Si cest une utilisation classique, optez pour General Purpose.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 15/75

Voici 2 informations primordiales qu'il vous faut saisir et ne pas mlanger.... et dont il faudra
vous souvenir.
* le nom global Oracle (de type NomDeLaBase.domain.extension)
* l'identificateur systeme Oracle, ou SID. Ce dernier ne devait pas dpasser 4 caractres dans
les versions prcdentes, cette limite a fort heureusement t bannie dans la version 9.

Nous allons maintenant definir comment Oracle va grer ses connexions utilisateurs. Dans
notre cas de figure (peu d'utilisateurs concurrents), nous pouvons opter pour la premire
option.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 16/75

Compte tenu que le poste que l'on utilise n'est visiblement pas ddie Oracle, on ne lui
attribue que 50% de la mmoire disponible (en esprant que cel soit suffisant: dans mon
exemple, la machine a 512Mo de RAM).
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 17/75

Oracle a dfini pour nous un certain nombre de fichiers (de contrle, de donnes, de redo log,
de journalisation...). Plus tard, vous pourrez les dplacer pour des raisons de place, de
scurit, ... Nous nous contentons pour l'instant aux valeurs par dfaut.

Nous pourrions ici sauvegarder nos options comme base model. Nous n'aurons pas pour
l'instant cette prtention.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 18/75

Voici un recapitultif des options que nous avons choisies. Aprs une dernire validation, la
gnration de la base commence.

Chaque base de donnes est accessible par des utilisateurs particuliers. Nous allons pouvoir
les grer dans l'cran qui suit.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 19/75

Relevons les deux utilisateurs Oracle systme que sont SYS et SYSTEM.
Ds la version 9.0.2, le systme vous demande de leur spcifier un mot de passe bien
particuliers, ceci pour faire fi des problmes de scurit relatifs aux mots de passe par dfaut
(avant, seul SYS devait tre chang, SYSTEM pouvant maintenir le mot de passe manager
Lorsque ceci est fait, la gnration de la base est termine.
4-Configuration de la connectique
Etant en architecture Client/Serveur, il va falloir maintenant configurer la couche rseau avec
que Serveur et Clients puissent communiquer. Dmarrons donc le programme Oracle -
Oracle9i -> Configuration and Migration Tools -> Net Configuration Assistant.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 20/75

Voici le menu principal de l'assistant. Nous allons commencer par le module d'coute du
serveur.

Nous choisissons donc d'ajouter un module d'coute. Par ce biais, nous autorisons le serveur
Oracle couter sur un port particulier de la machine si un client lui envoie une requte.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 21/75

Dterminons un nom pour ce module d'coute.

Nous devons choisir un protocol rseau (au minimum) qui sera utilis. Nous optons pour le
protocole le plus rpandu, savoir le TCP-IP.

Nous dterminons le port d'coute. Ici, deux coles s'affrontent pour des raisons de scurit:
les DBAs qui prnent le maintient du port par dfaut qu'Oracle propose (1521), et ceux pour
lesquels ceci constitue une faille dans la scurit. Partant du fait que la plupart des serveurs
dignes de ce nom incorporent un pare-feu (firewall), nous garderons pour commencer le port
par dfaut.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 22/75

Pour l'instant, un seul module nous suffit.

Choisissons maintenant une mthode de rsolution de noms.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 23/75

Voici les divers choix qui soffrent nous. Il est inutile de compliquer en ajoutant trop de
rsolution. Normalement, le systme en a prslectionn une par dfaut.

Fin de la configuration de la rsolution des nom (en fait, il n'y avait rien faire).
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 24/75

Aprs avoir configur le serveur pour quil coute le client, il va nous falloir configurer le
client pour qu'il sache qui parler.

Pour chaque client, il faudra donc configurer un service rseau en local. On le verra plus tard,
la distribution d'un unique fichier sur tous les clients sera suffisante.

Compte tenu de quelques problmes de compatibilit descendante avec les versions pr-8, il
est ncessaire de spcifier si le serveur utilise une version plus ou moins rcente.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 25/75

Donnons ensuite un nom au service. Par habitude on donne gnralement le nom SID

Voici venu le temps du choix du protcole. C'est le protocole TCP-IP qui s'impose
gnralement.

Le serveur de donnes va utiliser un port d'coute pour communiquer avec ses clients. Il faut
donc spcifier
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 26/75
* l'adresse IP de la machine hbergeant le serveur Oracle (ou son nom s'il est reconnu par le
DNS)
* le numro de port sur lequel il communiquera. En standard, Oracle utilise le port 1521. Si
vous avez activ un pare-feu sur le serveur, n'oubliez pas d'ouvrir ce port.

Cet cran vous permet alors de tester la connectivit ainsi configure. Il est fortement
conseill de perdre quelques minutes ce test
.
Si, comme moi, vous avez modifi les logins par dfaut, vous pourriez vous retrouver avec ce
type d'erreur. Pas de panique, il suffit juste de changer de connexion grce au bouton adquat.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 27/75

Voil, calibr sur ce que nous avions spcifi lors de la configuration des utilisateurs

Visiblement, tout est en ordre maintenant.

Nous attribuons maintenant un nom au service rseau prcdemment cr. Il va nous faciliter
la tche plus tard.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 28/75

Il est possible de configurer plusieurs services. Nous ne sommes pas intresss ici.

Voil! La configuration de la couche rseau est faite.
Installation via fichier de rponses

Si vous ne souhaitez pas rester derrire votre cran remplir cet ensemble de botes de
dialogues, il est possible de lancer l'Installer en lui spcifiant un fichier de rponses qui fera,
lorsqu'il aura t correctement rempli, la majeure partie de ces tches fastidieuses.

Exemple de fichier de rponses
[General]
RESPONSEFILE_VERSION=1.7.0

[SESSION]
FROM_LOCATION="w:\stage\products.jar"
FROM_LOCATION_CD_LABEL="Oracle9i"
NEXT_SESSION_RESPONSE=
ORACLE_HOME="d:\oracle\9i"
ORACLE_HOME_NAME="O9i"
TOPLEVEL_COMPONENT={"oracle.server","9.2.0.1.0"}
DEINSTALL_LIST={"oracle.server","9.2.0.1.0"}
SHOW_SPLASH_SCREEN=false
SHOW_WELCOME_PAGE=false
SHOW_COMPONENT_LOCATIONS_PAGE=false
SHOW_CUSTOM_TREE_PAGE=false
SHOW_SUMMARY_PAGE=FALSE
SHOW_INSTALL_PROGRESS_PAGE=TRUE
SHOW_REQUIRED_CONFIG_TOOL_PAGE=FALSE
SHOW_OPTIONAL_CONFIG_TOOL_PAGE=false
SHOW_RELEASE_NOTES=false
SHOW_END_SESSION_PAGE=false
SHOW_EXIT_CONFIRMATION=false
NEXT_SESSION=false
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 29/75
NEXT_SESSION_ON_FAIL=false
SHOW_DEINSTALL_CONFIRMATION=FALSE
SHOW_DEINSTALL_PROGRESS=true
LOCATION_FOR_DISK2="W:\"
LOCATION_FOR_DISK3="W:\"

[oracle.server_9.2.0.1.0]
COMPONENT_LANGUAGES={"fr"}
INSTALL_TYPE="EE"
s_cfgtyperet="Software Only"

[oracle.options.ops_9.2.0.1.0]
s_rawDeviceName=

[oracle.apache_9.2.0.1.0]
s_jservPort=
s_apachePort=
b_autoStartApache=

Des exemples de fichiers similaires se trouvent sous le CD d'installation 1, dans le rpertoire
Response.
Modifiez-le donc voter convenance, et lancez-le via

C:\>setup -responsefile c:\temp\monInstallO9i.res

... dans la mesure o votre CD est l'unit C: et votre fichier de rponses a t sauvegard sous
c:\temp\monInstallO9i.res

5-Ma premire connexion
Exemple sous Windows, dans une fentre de commande
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.

C:\>sqlplus system/MotDePasse@ORACLEDB

SQL*Plus: Release 9.2.0.1.0 - Production on Ma Fev 3 14:02:15 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

ConnectT a :
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

SQL> desc DICTIONARY
Nom NULL ? Type
----------------------------------------- -------- -----------------------
-----

TABLE_NAME VARCHAR2(30)
COMMENTS VARCHAR2(4000)

SQL>exit

Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 30/75
Chapitre 3 : SQL


1- Interrogation : lordre SELCT
Le syntaxe complet dun ordre SELECT

SELECT col, col, ..
FROM nom_table
[WHERE condition [ OR | AND condition]]
[GROUP BY col, col, ..]
[HAVING condition [ OR | AND condition]]
[ORDER BY col, col, ]

Lordre SELECT permet linterrogation dune base de donnes afin dafficher des donnes.
Il permet :
La projection
La selection
La jointure
La clause SELECT contient la liste de colonnes qui vont etre affichs comme rsultat. La
clause FROM spcifie la ou les tables dans laquelle , la recherche va etre ffectue. La clause
WHERE spcifie une condition de selection de quelques enregistrements de lensemble de
donnes de la tables.
Exemple : afficher le nom et le salaire de chaque employ :
Rponse :
Select ename, sal
From emp ;
Exemple :afficher les jobs des employs de dpartement 20
Rponse :
Select job
From emp
Where deptno=20
2- Les jointures :
Une jointure a pour but dafficher des informations issus de plusieurs tables.
Quand on prcise plusieurs tables dans la clause FROM, on obtient le produit cartsien des
tables. Ce produit cartsien na aucun intrt. Ce qui est normalement souhait, c'est de
joindre les informations de diverses tables, en recollant les lignes des tables suivant les
valeurs qu'elles ont dans certaines colonnes.
Exemple : afficher le nom de lemploy et le nom de son dpartement.
Dans cet exemple, le nom de lemploy se trouve dans la table emp , tandis que le nom de
dpartement se trouve dans dept . cest la colonne deptno qui existe dans les deux tables
qui va assure leur liaison.
IL y quatres types de jointures :
Lquijointure
La non quijointure
Lautojointure
La jointure externe.

Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 31/75
2.1 Lquijointure :
Appel encore jointure simple ou naturelle, bas sur lgalit des valeurs de deux colonnes
dans deux tables diffrentes. Par exemple , une cl primaire dune table et la cl trangre qui
lui correspond dans une autre table.
Exercice : afficher le nom de lemploy numro 7800, et le nom de son dpartement.
Dans cet exemple, le nom de lemploy se trouve dans la table emp , tandis que le nom de
dpartement se trouve dans dept . cest la colonne deptno qui existe dans les deux tables
qui va assure leur liaison.
Rponse :
Select ename, dname
From emp, dept
Where empno=7800 ;

2.2 La non quijointure :
La relation entre la table emp et la table salgrade est une nonquijointure car aucune
colonne de la table emp ne correspond directement une colonne de la table salgrade.
La relation qui existe entre les deux tables est la suivante : les valeurs de la colonne SAL
De la table emp sont comprises entre les valeurs des colonnes LOSAL et HISAL
de la table SALGRADE . Il faut donc utiliser un autre oprateur que le signe = pour
effectuer une jointure.
Exercice : afficher pour chaque employ , son salaire et son grade.
Rponse :
Select ename, sal, grade
From emp, salgrade
Where sal betwenn losal and hisal

2.3 Autojointure :
Lautojointure est une liaison dune table elle-mme. C'est--dire, utiliser la meme table
deux fois, la premiere pour cherche une valeur X partir de donnes, et la deuxieme est de
trouver le rsultt final partir de X.

Exercice : afficher le nom du directeur de lemloy numro 7800.
Rponse :
select e.ename
from emp e, emp p
where e.empno = 7800 and e.mgr = p.empno ;

Les serveur Oracle excute cet ordre en trois tapes :
- parcourir la colonne empno de la table emp en cherchant la valeur 7800.
- Lire la valeur mgr de cet employ :6200
- Chercher 6200 dans la colonne empno et lire le nom de directeur dans la
colonne ename
2.4 Jointure externe :
La jointure externe permet de visualiser les lignes qui ne rependent pas la condition de
jointure. Loprateur de jointure externe est le signe (+). Il se place du cot de la jointure ou
linformation est incomplte.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 32/75
Il cre une ou plusieurs lignes NULL auquel une ou plusieurs lignes de la table complete sont
lies.
Exercice : afficher les nom des dpartements et les noms de leur dpartement meme les
dpartements ne contenant pas demploy :
Rponse :
Select d.dname, e.ename
From emp e, dept d
Where e.deptno (+) = d.deptno ;


3- Les fonctions de groupe
3.1 Objectifs:
A la fin de cette partie vous aurez :
- Identifier les fonctions de groupe disponibles
- savoir regrouper les donnes avec la clause GROUP BY
- savoir inclure et exclure des groupes par la clause HAVING

3.2 Dfinitions :
Les fonctions de groupe agissent sur des groupes de lignes et donne un rsultat par groupe

Table emp









3.3 Quelques fonctions de groupe :

AVG(col) moyenne
SUM(col) somme
MIN(col) plus petite des valeurs
MAX(col) plus grande des valeurs
COUNT(*) nombre de lignes
COUNT(col) nombre de valeurs non nulles de la
colonne
COUNT(DISTINCT col) nombre de valeurs non nulles
distinctes

empno job sal
1100 .. CLERK 500
1110 SALESMAN 600
.
..
Le plus grand salaire ???
MAX(sal)
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 33/75
3.4 Exemples dutilisation de AVG,SUM,MAX,MIN :

AVG et SUM sont utilises avec les donnes numriques.
Exemple :
select AVG(sal), SUM (sal), MIN(sal), mAX (sal)
from emp ;
MIN et MAX sutilisent avec tout type de donnes.

Exemple :
SQL>Select MIN (hiredate), MAX(hiredate)
From emp ;

MIN(hiredate) MAX(hiredate)
21-JAN-1981 26-MAR-1992




SQL>Select MIN (ename), MAX (ename)
From emp ;

MIN (ename) MAX (ename)
ADAMS WARD

3.5 Utilisation de la fonction COUNT :
COUNT(*) ramne le nombre de ligne dune table.
Exercice : afficher le nombre demploy de dpartement 30
Rponse :
SQl> Select count(*)
From emp
Where deptno = 30 ;

Count (*)
26

Exercice : afficher le nombre demploy de dpartement 10, qui ont une commision :
Rponse :
SQl> Select count(comm)
From emp
Where deptno = 10 ;

Exercice : nombre de dpartements possdant des employs.
Rponse
SQl> Select count( distinct ( deptno ))
From emp ;

Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 34/75
3.6 Utilisation de la fonction NVL :
la fonction NVL force la prise en compte des valeurs NULL dans les fonctions de groupe en
remplaant la valeur NULL par une autre valeur.
Exercie :
SQL> Select AVG( NVL ( comm , 0 ))
From emp ;
3.7 Cration de groupe de donnes , la clause GROUP BY :



le salaire moyen

par dpartement





Il est possible de subdiviser la table en groupes, chaque groupe tant l'ensemble des lignes
ayant une valeur commune.


Syntaxe :
Select colonne, fonction_de_groupe
From table
[ where condition]
GROUP BY exp1, exp2,...

La clause GROUP BY groupe en une seule ligne toutes les lignes pour lesquelles exp1,
exp2,... ont la mme valeur. Cette clause se place juste aprs la clause WHERE, ou aprs la
clause FROM si la clause WHERE n'existe pas. Des lignes peuvent tre limines avant que
le groupe ne soit form grce la clause WHERE.
Remarque : la clause GROUP BY doit inclure tout les colonnes de la liste SELECT qui ne
figure pas dans une fonction de groupement
Exercice : calculer le salaire moyen par dpartement tri par salaire moyen.
Rponse :
SQL> Select deptno, AVG(sal)
From emp
Group by deptno
Order by AVG(sal)
Exercice :afficher la somme des salaires pour chaque poste ,regroup par dpartement.
Rponse :
Select deptno, job, SUM (sal)
From emp
Group by deptno, job ;

empno job sal
1100 .. CLERK 500
1110 SALESMAN 600
.
..
Deptno AVG(sal)

10 1500
20 1300
30 1350
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 35/75
3.8.Restriction de groupes, HAVING
On ne peut pas utiliser la clause WHERE pour limiter les groupes. La clause HAVING
permet ceci.
Exercice : afficher le salaire moyen de chaque dpartement ,qui dpasse 1300.
Rponse :
Select deptno, AVG (sal)
From emp
Group by deptno
HAVING AVG(sal) > 1300 ;




4- Les sous interrogations

Une caractristique puissante de SQL est la possibilit qu'un critre de recherche employ
dans une
clause WHERE (expression droite d'un oprateur de comparaison) soit lui-mme le rsultat
d'un
SELECT ; c'est ce qu'on appelle une sous-interrogation.

4.1 Sous-interrogation ramenant une seule valeur (monoligne)

Exercice : Quels sont les employs ayant la mme fonction que JAMES ?
La fonction de JAMES est inconnu, do la ncessit dutiliser une sous interrogation
ramenant cette
valeur
Rponse :

SQL> Select ename
From emp
Where job = (select job
From emp
Where ename=JAMES) ;

Remarques
- une sous-interrogation qui ne ramne aucune ligne se termine avec un code d'erreur.
- une sous-interrogation ramenant plusieurs lignes provoquera aussi, dans ce cas, une erreur
- avec une sous interrogations monolognes, on utilise un oprateur monoligne(=, !=, >, >=, <,
<=)


4.2 Sous-interrogation ramenant plusieurs lignes (multiligne)

Une sous-interrogation peut ramener plusieurs lignes condition que l'oprateur de
comparaison
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 36/75
admette sa droite un ensemble de valeurs. Les oprateurs permettant de comparer une valeur
un
ensemble de valeurs sont :
- l'oprateur IN
- les oprateurs obtenus en ajoutant ANY ou ALL la suite d'un oprateur de comparaison
classique (=, !=, >, >=, <, <=)
- ANY: la comparaison est vraie si elle est vraie pour au moins un des lments de
l'ensemble.
- ALL: la comparaison sera vraie si elle est vraie pour tous les lments de l'ensemble.

Exercice : Quels sont les employs gagnant plus que tous les employs du dpartement 30.
Rponse :
Select ename
From emp
Where sal > ALL (select sal
From emp
Where deptno = 30) ;

4.3 Sous-interrogation ramenant plusieurs colonnes
(multicolonnes)

Il est possible de comparer le rsultat d'un SELECT ramenant plusieurs colonnes une liste
de colonnes. La liste de colonnes figurera entre parenthses gauche de l'oprateur de
comparaison.

Exercice : Quels sont les employs ayant mme fonction et mme suprieur que CODD?
Rponse :

Select ename
From emp
Where (job , mgr) = (select job ,mgr
From emp
Where ename= CODD ) ;

4.4Sous-interrogation synchronise avec l'interrogation principale

Dans les exemples prcdents, la sous-interrogation tait value d'abord, puis le rsultat
pouvait tre utilis pour excuter l'interrogation principale. SQL sait galement traiter une
sous- interrogation faisant rfrence une colonne de la table de l'interrogation principale. Le
traitement dans ce cas est plus complexe car il faut valuer la sous-interrogation pour chaque
ligne de l'interrogation principale.

Exercice : Quels sont les employs ne travaillant pas dans le mme dpartement que leur
suprieur hirarchique ?
Rponse :
Select ename
From emp e
Where deptno < > (select deptno
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 37/75
From emp
Where empno=e.mgr)

Il a fallu ici renommer la table emp de l'interrogation principale pour pouvoir la rfrencer
dans la sous-interrogation.

4.5 Sous-interrogations multiples

Un SELECT peut comporter plusieurs sous-interrogations, soit imbriques, soit au mme
niveau dans diffrents prdicats combins par des AND ou des OR.

Exercice : Afficher les noms et les jobs des employs qui ont le meme job que lemploy
numero 7800 et qui ont un salaire suprieur celui de lemploy numro 7654.
Rponse 1 :

SQL> Select ename
From emp
Where job = (select job
From emp
Where empno=7800)
AND
Sal > (select sal
From emp
Where empno = 7654) ;

Rponse 2 :
SQL> Select ename
From emp
Where job = (select job
From emp
Where empno=7800)
INTERSECT
Select ename
From emp
Where Sal > (select sal
From emp
Where empno = 7654) ;
Exercice :afficher le nom, le job et le salaire de tout les employs dont le salaire est gal au
salaire minimum des employs.
Rponse :
Select ename, sal, job
From emp
Where sal = (select MIN (sal)
From emp) ;
Exercice :afficher tout les dpartements dont le salaire minimum est suprieur au salaire
minimum de dpartement 20.



Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 38/75
Rponse


Select deptno
From emp
Group by deptno
Having MIN(sal) >( select MIN (sal)
From emp
Where deptno=20)

Exercice :trouver les jobs ayant le salaire moyen le moins lev.
Rponse :
Select job , AVG (sal)
From emp
Froup by job
Having AVG(sal) = (select MIN ( AVG ( sal ) )
From emp
Group by job) ;

5- Les oprateurs ensemblistes :

5.1 Objectifs :
A la fin de cette partie, vous saurez :
- dcrire les oprateurs ensemblistes
- utiliser un oprateur ensembliste pour combiner plusieurs requtes en une seule
- vrifier lordre des lignes ramenes


Pour cette section on supposera que deux tables :
EMP( empno, ename, job, mgr,sal, comm, hiredate ,deptno)
EMP_HISTORY(num, nom, fonction, numdept)

EMP : contient des informations sur les employs qui travaillent encore.
EMP_HISTORY :contient des informations sur les employs qui ont quitt les entreprises


5.2 Oprateur UNION
L'oprateur UNION permet de fusionner deux slections de tables pour obtenir un
ensemble de lignes gal la runion des lignes des deux slections. Les lignes
communes n'apparatront qu'une fois.

Exemple :
Les noms des SALESMAN :
SELECT ename FROM EMP
WHERE job=' SALESMAN '
UNION
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 39/75
SELECT nom FROM EMP_HISTORY
WHERE fonction='SALESMAN'


5.3 Oprateur INTERSECT
L'oprateur INTERSECT permet d'obtenir l'ensemble des lignes communes deux
interrogations.
Exemple :
Liste des job qui existe depuis la cration de lentreprise :
SELECT distinct(job) FROM EMP
INTERSECT
SELECT distinct(fonction) FROM EMP_HISTORY

5.4 Oprateur MINUS
Loprateur MINUS permet d'ter d'une slection les lignes obtenues dans une deuxime
slection.
Exemple :
Liste des dpartements qui nont pas des employs qui ont quitt lentreprise
SELECT deptno FROM EMP
MINUS
SELECT numdept FROM EMP_HISTORY ;
5.5 Oprateur UNION ALL :
Cet oprateur , par opposition UNION , nelemine pas les doublons :

Exemple :
Liste de nom des employs depuis la cration de lentreprise :
SELECT ename FROM EMP
UNION ALL
SELECT nom FROM EMP_HISTORY
5.6 Remarques :
- le nombre de colonnes dans les deux ordres SELECT doit etre gale.
- les types de colonnes doivent etre identique respectivement.( premire colonne de premier
ordre avec premire colonne du second,etc.
Exercice : Afficher les noms et salaire de tous les employs :
SELECT ename , sal
FROM EMP
UNION
SELECT nom , 0
FROM EMP_HISTORY
La valeur de sal est 0 pour tous les employs qui ont quitt lentreprise.





Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 40/75
6- Langage de manipulation de donnes LMD

6.1 Dfinition

Le langage de manipulation de donnes est le langage permettant de modifier les informations
contenues dans une base de donnes.
L'unit manipule est la ligne. Il existe trois commandes sql permettant d'effectuer les trois
types de
modifications des donnes : ajout, modification et suppression.

6.2 Ajout de lignes :INSERT

La commande INSERT permet d'insrer une ligne dans une table en spcifiant les valeurs
insrer.
La syntaxe est la suivante :

INSERT INTO nom_table(nom_col1, nom_col2, ...)
VALUES (val1, val2...)
La liste des noms de colonne est optionnelle. Si elle est omise, la liste des colonnes sera par
dfaut
la liste de l'ensemble des colonnes de la table dans l'ordre de la cration de la table.
Si une liste de colonnes est spcifie, les colonnes ne figurant pas dans la liste auront la valeur
NULL.

Il est possible d'insrer dans une table des lignes provenant d'une autre table. La syntaxe est la
suivante :
INSERT INTO nom_table(nom_col1, nom_col2, ...)
SELECT ...
Le SELECT peut contenir n'importe quelle clause sauf un ORDER BY qui impliquerait un
classement
des lignes contraire l'esprit du relationnel.

Exemple : Insrer dans la table bonus les noms et salaires des directeurs.
INSERT INTO bonus
SELECT nom, salaire
FROM emp
WHERE fonction = 'directeur';


6.3 Modification de lignes : UPDATE

La commande UPDATE permet de modifier les valeurs d'une ou plusieurs colonnes, dans une
ou plusieurs lignes existantes d'une table. La syntaxe est la suivante :
UPDATE nom_table
SET nom_col1 = {expression1 | ( SELECT ...) },
nom_col2 = {expression2 | ( SELECT ...) }
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 41/75
WHERE prdicat
Les valeurs des colonnes nom_col1, nom_col2, ... sont modifies dans toutes les lignes
satisfaisant au prdicat. En l'absence d'une clause WHERE, toutes les lignes sont mises jour.
Les expressions expression1, expression2,... peuvent faire rfrence aux anciennes valeurs
de la ligne.

Exemple : Augmenter de 10% les salaires ingnieurs.
UPDATE emp
SET salaire = salaire * 1.1
WHERE fonction = 'ingnieur' ;

6.4 Suppression de lignes : DELETE

La commande DELETE permet de supprimer des lignes d'une table.
La syntaxe est la suivante :
DELETE FROM nom_table
WHERE prdicat ;
Toutes les lignes pour lesquelles prdicat est valu vrai sont supprimes. En l'absence de
clause WHERE, toutes les lignes de la table sont supprimes.

7- Lanagae de dfinition de donnes LDD
7.1 Les types de donnes en SQL
Les types de donnes les plus utiliss sont :

NUMBER[(longueur,[prcision]
Ce type de donnes permet de stocker des donnes numriques la fois entires et
relles dont la valeur est comprise entre 10^-130 et 10^125 avec une prcision de 38
chiffres.
Longueur
prcise le nombre maximum de chiffres significatifs stocks (par dfaut 38),
Prcision
donne le nombre maximum de chiffres aprs la virgule (par dfaut 38), sa valeur peut
tre
comprise entre -84 et 127. Une valeur ngative signifie que le nombre est arrondi
gauche de la
virgule.
CHAR(longueur)
Ce type de donnes permet de stocker des chanes de caractres de longueur fixe. longueur
doit
tre infrieur 255, sa valeur par dfaut est 1.
VARCHAR2(longueur)
Ce type de donnes permet de stocker des chanes de caractres de longueur variable.
longueur
doit tre infrieur 2000, il n'y a pas de valeur par dfaut.
DATE
Ce type de donnes permet de stocker des donnes constitues d'une date et d'une heure.

Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 42/75
7.2 Les contraintes

Les diffrentes contraintes que l'on peut dclarer sont les suivantes :

NOT NULL
La colonne ne peut pas contenir de valeurs NULL.
UNIQUE
Chaque ligne de la table doit avoir une valeur diffrente ou NULL pour cette (ou ces)
colonne.
PRIMARY KEY
Chaque ligne de la table doit avoir une valeur diffrente pour cette (ou ces) colonne. les
valeurs
NULL sont rejetes.
FOREIGN KEY
Cette colonne fait rfrence une colonne cl d'une autre table.
CHECK
Permet de spcifier les valeurs acceptables pour une colonne.



7.3 Lordre CREATE Table :pour la cration dune table

Spcification dune cl primaire

CREATE TABLE nom_table (
Nom_colonne1 type_donnes [NOT NULL],

Nom_colonne_ntype_donnes [NOT NULL],
[Constraint nom_contrainte]
[Primary key (nom_colonneA, nom_colonneB,,nom_colonneX)]
) ;

nom_contrainte est un nom optionnel qui identifie la contrainte
nom_colonneA nom_colonneX reprsentent les colonnes qui composent la cl
primaire de la table.

Exemple :

CREATE TABLE Ligne_Facture (
Numfact Number(5),
Codprod varchar2(5),
Qtefact Number(9,3) NOT NULL
Constraint CP_LIG_FACT
Primary key (Numfact, Codprod)) ;

Remarque :
La contrainte NOT NULL nest pas utilise pour les colonnes Numfact et Codprod car
la contrainte Primary Key remplace, entre autre, NOT NULL.

Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 43/75

Spcification dune cl trangre

CREATE TABLE nom_table (
Spcification_colonne1,

Spcification_colonneN,
[Constraint nom_contrainte_CE Foreign Key (nom_colonneF1,,nom_colonneFN)
references table_rfrence (nom_colonneP1,,nom_colonnePN),]

[Constraint nom_contrainte_CP]
[Primary key (nom_colonneA, nom_colonneB,,nom_colonneX)]
) ;


Spcification_colonne1 spcificatin_colonneN sont les spcifications des colonnes
valides (dcrites ci-aprs en dtail).
nom_contrainte_CE est le nom optionnel de la contrainte de cl trangre.
nom_colonneF1 nom_colonneFN reprsentent les colonnes qui composent la cl
trangre.
table_rfrence reprsente la table laquelle se rfre la dclaration de la cl
trangre.
Nom_colonneP1 nom_colonnePN reprsentent la cl primaire de la table rfrence.
La syntaxe pour spcification colonne est la suivante :
nom_colonne type_donnes [DEFAULT valeur_par_dfaut]
[Constraint nom_contrainte] [NULL] | [NOT NULL] | [UNIQUE] | CHECK (condition)

valeur_par_dfaul est une valeur affecte la colonne lors dune insertion.
Nom_contrainte dsigne le nom de la contrainte.
Condition est un condition boolenne que doit vrifier les valeurs affectes la
colonne.

Exemple:

CREATE TABLE Facture (
Numfact Number(5) ,
Datefact date default SYSDATE,
Mode_paie varchar2(10) Constraint CK_mode CHECK (mode_paie IN
(cheque,espce)),
Codcli varchar2(5),
Constraint CP_FACT Primary key (Numfact),
Constraint CE_CODCLI Foreign Key (Codcli) references Client(codcli)) ;

7.4 Lorder ALTER TABLE :
Permet de modifier la dfinition dune table par ajout (option ADD) ou par
modification(option MODIFY).
Exemple :ajouter aux employs un attribut indiquant leur adresse :
Rponse :
SQL> ALTER TABLE emp
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 44/75
ADD (adresse varchar2(50)) ;
Exemple : modifier la taille de nom des employs
Rponse :
ALTER TABLE emp
MODIFY (ename varchar2(30)) ;


8. Langage de contrle de donnes LCD

8.1 Les transactions dans SQL : COMMIT et ROLLBACK

Dans la norme SQL, une transaction commence au dbut d'une session de travail ou juste
aprs la _n de la transaction prcdente. Elle se termine par un ordre explicite de validation
(commit) ou d'annulation (rollback).
Certains SGBD ne respectent pas la norme et demandent une commande explicite pour
dmarrer une transaction.
L'utilisateur peut tout moment valider (et terminer) la transaction en cours par la commande
COMMIT. Les modifications deviennent alors dfinitives et visibles toutes les autres
transactions.
L'utilisateur peut annuler (et terminer) la transaction en cours par la commande ROLLBACK.
Toutes les modifications depuis le dbut de la transaction sont annules.

Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 45/75





Chapitre 4 : La langage PL/SQL



1- Introduction
SQL est un langage complet pour travailler sur une base de donne relationnelle,
mais il ne comporte pas des instructions procdurales. PL/SQL comprend quant
lui :
La partie LID (Langage dInterrogation des donnes) de SQL (Select),
la partie LMD (Langage de Manipulation des Donnes) de SQL (Update,
Insert,)
la gestion des transaction (Commit, Rollback)
les fonctions standard de SQL
plus une partie procdurale (IF, WHILE,)

REMARQUE : PL/SQL ne comporte pas dinstructions de LDD (Create, Alter)

2- Structure dun bloc PL/SQL

PL/SQL n'interprte pas une commande, mais un ensemble de commandes
contenues dans un programme ou bloc PL/SQL. La structure dun bloc est la
suivante:


DECLARE
Dclarations de variables, constantes, exception;
BEGIN
Section obligatoire contenant des instructions SQL et PL/SQL ou des blocs fils
(Possibilits dimbrication de blocs)
EXCEPTION
Traitement des exceptions (gestion des erreurs)
END;


REMARQUES :
Les sections DECLARE et Exception sont optionnelles
Chaque instruction de nimporte quel section doit se terminer par un ;
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 46/75
Exemple dun bloc PL/SQL :

DECLARE
qte_stock number(5);
BEGIN
Select quantite into qte_stock from PRODUITS
where codprod= p1;
-- contrle du stock suffisant
If qte_stock > 0
then update produits set quantite=quantite-1
where codprod= p1;
Insert into achat values (p1', SYSDATE)
else
Insert into acheter values ('Plus de p1',SYSDATE);
end If, commit ; END;

3- Les dclarations PL/SQL

La partie dclarative dans un bloc PL/SQL, peut comporter trois types de
dclarations. Elle
est dlimite par les mots-cl :
DECLARE, qui spcifie le dbut et
BEGIN, qui signifie la fin de la dclaration et le dbut de la partie des
commandes.
Les types de dclarations possibles dans cette partie sont les suivants :
dclaration des variables et des constantes,
dclaration de curseurs,
dclaration des exceptions.
3.1 Types de donnes
Chaque variable ou constante utilise dans un bloc PL/SQL, possde un type de
donnes.
PL/SQL offre deux varits de types de donnes prdfinies : scalaire et compos.
Les types scalaires :
Number : un numrique
Positive : entiers positifs
Decimal , float, integer, real sont des sous-types de number
Char : chane de caractre taille fixe allant jusqu 32 767 caractre (au lieu de
255 dans la
dfinition des colonnes des tables)
Varchar2 : est une chane de caractre de longueur variable allant jusqu 32 767
(au lieu de
2000 dans la dfinition des colonnes des tables)
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 47/75
Boolean : type boolen ses valeurs possibles sont TRUE, FALSE, NULL
Date : type date dOracle
Les types Composs :
Record : cest le type enregistrement
Table : cest le type tableau

3.2 Variables et constantes

La dclaration d'une variable consiste allouer un espace pour stocker et modifier une valeur.
elle est type et peut recevoir une valeur par dfaut et/ou un statut NOT NULL. Une constante
est dfinie comme une variable, mais l'utilisateur ne peut pas modifier son contenu.
3.2.1. La dfinition des variables en PL/SQL

Les variables se dfinissent dans la partie DECLARE, du bloc PL/SQL en utilisant
la syntaxe suivante :
nomvariable [CONSTANT]
{type | variable%TYPE | colonne_de_table.%ROWTYPE}
[{ :=|DEFAULT valeur]


Remarques :
L'attribut CONSTANT permet de figer l'affectation d'une variable.
On peut faire rfrence une colonne d'une table par la dclaration :
nom_variable TABLE.COLONNE%TYPE,
On peut faire rfrence une ligne d'une table par la dclaration
Nom_variable TABLE%ROWTYPE,
L'initialisation d'une variable se fait par l'oprateur := suivi d'une constante, d'une
expression PL/SQL, d'une fonction PL/SQL.
Exemples de dclaration de variables :
Total NUMBER(9,3);
Nom CHAR(4) := ISET;
Longeur NUMBER NOT NULL := LENGTH (Nom)*2;
Date_Cration DATE;
Numro EMPLOYE.EMPNO%TYPE;
Dpt DEPARTEMENT%ROWTYPE;
Prnom Nom%TYPE;
Pi CONSTANT NUMBER:= 3.14;3.2.2 Laffectation des variables PL/SOL

Deux possibilits daffectation ou dassignement sont disponibles:
- par l'oprateur d'affectation: ':='
- par la clause Select .. Into
La difficult dans l'utilisation de la clause Select rsulte du nombre de lignes ou d'occurrences
retourn.
Si le Select retourne une et une seule valeur l'affectation s'effectue correctement. Par contre
Si le SELECT ne retourne aucune ligne, lerreur PL/SQL NO_DATA_FOUND sera gnre.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 48/75
Si le SELECT retourne plusieurs lignes : lerreur TOO_MANY_ROWS sera gnre.
3.4. Les enregistrements prdfinis (record PL/SQL)

La restriction pose par l'utilisation du type %ROWTYPE pour dclarer un enregistrement
rside dans le manque de spcification des types de donnes au niveau de l'enregistrement.
L'implmentation du nouveau type compos nomm RECORD a permis de lever cette
restriction.

3.4.1 La dclaration d'un enregistrement

Comme les tableaux PL/SQL, la dclaration d'un enregistrement se fait en deux tapes :
1. Dclaration du type de l'enregistrement
2. Dclaration de la variable du type dfini.

On peut dclarer un Type RECORD dans la partie dclarative d'un bloc ou d'un sous-
programme en utilisant la syntaxe suivante:


TYPE nom_type IS RECORD

(champ {type_champ | table.colonne%TYPE [NOT NULL],
champ (type_champ | table.colonne%TYPE [NOT NULL],.. )

nomtype : utilis ensuite dans la dclaration des enregistrements PL/SQL.
Type-champ : type de donnes comme CHAR, DATE ou NUMBER.
Lorsque le type est dclar,On peut dclarer des enregistrements de ce type de la faon
suivante :
Nom_erg nom_type ;
3.4.2 L'accs aux champs d'un enregistrement
Pour accder un lment d'une variable de type record, il suffit d'utiliser la syntaxe suivante
Nom_erg.nom_champ
Pour affecter la valeur d'une expression PL/SQL un lment de l'enregistrement, on doit
utiliser la syntaxe suivante :
Nom_erg.nom_champ := expression_pl/sql;

Exemple :

DECLARE
TYPE ADRESSE IS RECORD
(Numero positive,
Rue varchar2(35),
CodePost char(5),
Ville varchar2(25),
Pays varchar2(30) );
TYPE CLIENT IS RECORD
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 49/75
(NumCIi positive,
NomCli varchar2(40),
Adrcli ADRESSE,
CA number(12,3));
monclient CLIENT ;
BEGIN
monclient.NumCIi := 1234;
monclient.NomCIi := TOTO;
monclient.AdrCli.Numero := 10;
END ;
4-Structure de controle
4.1. Les traitements Conditionnels

IF condition_plsql
THEN commandes
[ELSE commandes]
[ELSIF condition_plsql
THEN commandes
[ELSE commandes]]
END IF;
La condition peut utiliser les variables dfinies ainsi que tous les oprateurs prsents dans
SQL =,<,>,<=,>=,<>, IS NULL, IS NOT NULL.
Exemple :


DECLARE
vjob CHAR(10);
vnom employs.ename%type := BEN SALAH ;
msg CHAR(30) ;
BEGIN
Select job into vjob from employs where ename = vnom;
--contrle de la valeur de vjob
if vjob is NULL
then msg := vnom | pas de travail';
elsif vjob = Vendeur then
UPDATE employs set comm = 100 where ename=vnom ;
Msg := vnom || a 100 dinars de commission ;
Else
UPDATE employs set comm = 0 where ename=vnom ;
Msg := vnom || na pas de commission ;
End if ;
DBMS_OUTPUT.PUT_LINE(msg) ;
commit;
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 50/75
END ;
4.2 Les Traitements.Rptitifs
4.2.1. linstruction LOOP
LOOP permet de rpter une squence de commandes. Cette squence est comprise entre le
mot-cl LOOP, indiquant le dbut dune boucle et END LOOP, spcifiant sa fin.
Syntaxe :

LOOP
instructions
END LOOP ;
Les commandes EXIT,EXIT WHEN condition permettent de quitter la boucle.
Exemple :


DECLARE
somme number(10) := 0 ;
nombre number(5);
BEGIN
nombre:=0;
LOOP
Nombre:=nombre+1 ;
somme := somme + nombre ;
if nombre>=10
then EXIT;
end if ;
END LOOP;
DBMS_OUTPUT.PUT_LINE(la somme des 10 premiers entiers est ||
to_char(somme));
END;
4.2.2. L'instruction FOR LOOP
FOR compteur IN [REVERSE] var_debut.. var_fin LOOP

instructions

END LOOP ;

Compteur : est une variable de type entier, locale la boucle. Sa valeur de dpart est gale
par dfaut la valeur de l'expression entire de gauche (var_debut). Elle s'incrmente de 1,
aprs chaque traitement du contenu de la boucle, jusqu' ce qu'elle atteigne la valeur de droite
(var_fin).

Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 51/75

5. LES CURSEURS EN PL/SQL
Pour traiter une commande SQL, PL/SQL ouvre une zone de contexte pour excuter les
commandes et stocker les informations.
5.1. Dfinition
Le curseur permet de nommer cette zone de contexte, d'accder aux informations et
ventuellement de contrler le traitement. Cette zone de contexte est une mmoire de taille
fixe, utilise par le noyau pour analyser et interprter tout ordre SQL.
5.2. Les types de curseurs
Le curseur explicite
Il est cr et gr par l'utilisateur pour traiter un ordre Select qui ramne plusieurs
lignes. Le traitement du select se fera ligne par ligne.
Le curseur implicite
Il est gnr et gr par le noyau pour les autres commandes SQL.

5.3. Les tapes d'utilisation d'un curseur explicite
Pour traiter une requte qui retourne plusieurs lignes, l'utilisateur doit dfinir un curseur qui
lui permet dextraire la totalit des lignes slectionnes. Lutilisation d'un curseur pour traiter
un ordre Select ramenant plusieurs lignes, ncessite 4 tapes:
1. Dclaration du curseur
2. Ouverture du curseur
3. Traitement des lignes
4. Fermeture du curseur.
5.3.1. La dclaration d'un curseur
La dclaration du curseur permet de stocker l'ordre Select dans le curseur. La Syntaxe de
dfinition..
Le curseur se dfinit dans la partie DECALRE d'un bloc PL/SQL.
Cursor nomcurseur [(nompararn type [,nomparam type, .. )]
IS Commande_SELECT
Exemple :

Declare
Cursor DEPT_10 is
select ename, sal from emp where depno = 10;
5.3.2. L'ouverture et la fermeture dun curseur
L'tape d'ouverture permet d'effectuer:
1. l'allocation mmoire du curseur,
2. l'analyse smantique et syntaxique de l'ordre
3. le positionnement de verrous ventuels (si select for update.. )
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 52/75
L'tape de fermeture permet de librer la place mmoire rserv.
La syntaxe :

OPEN nomcurseur [(nomparam1[,nomparam2 , . .)]
/* traitement des lignes */
CLOSE nomcurseur
Exemple :
Begin

OPEN DEPT_10
/* traitement des lignes*/
CLOSE DEPT_10


5.3.3. Le traitement des lignes
Il faut traiter les lignes une par une et renseigner les variables rceptrices dfinies dans la
partie DECLARE du bloc.
La syntaxe :
Dans la partie traitement du bloc.PL/Sql, il faut commencer par ouvrir le curseur puis

FETCH nomcurseur
INTO nomvariable |
nomrecord

{nomvariable [
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 53/75

Lordre fetch ne ramne quune seule ligne la fois. De ce fait il faut recommencer lordre
pour traiter la ligne suivante.
Exemple :
Declare
Cursor DEPT_10 is
select ename, sal from emp where depno = 10;
Vnom emp.name%TYPE ;
Vsalaire emp.sal%TYPE ;
Begin
OPEN DEPT_10;
LOOP
FETCH DEPT10 into vnom,vsalaire ;
--Traitement ligne
END LOOP ;
CLOSE DEPT_10;
End;
5.4 Les attributs dun curseur
Les attributs dun curseur nous fournissent des informations sur lexcution dun ordre. Ils
sont conservs par PL/SQL aprs lexcution du curseur (implicite ou explicite)
Ces attributs permettent de tester directement le rsultat de lexcution. Ils sont rsums dans
le tableau suivant :


5.4.1 lattribut %Found
Cet attribut est de type boolen (vrai ou faux)
Pour les curseurs implicites, cet attribut est vrai si les instructions insert, update, delete
traitent au moins une ligne. Pour les curseurs explicites, il est vrai si le fetch ramne au moins une
ligne.
Exemple :
Declare
CURSOR num_cur1 IS SELECT num from tab1 ;
Curseurs implicites
Sql%Found
Sql%Notfound
Sql%Isopen
Sql%Rowcount
Sql%Rowtype

Curseurs explicites
Nomcurseur%Found
Nomcurseur %Notfound
Nomcurseur %Isopen
Nomcurseur %Rowcount
Nomcurseur %Rowtype

Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 54/75
CURSOR num_cur2 IS SELECT num from tab2 ;
Num1 number ;
Num2 number ;
somme number := 0;
Begin
OPEN num_cur1 ;
OPEN num_cur2 ;
LOOP
FFTCH num_cur1 INTO num1 ;
FFTCH num_cur2 INTO num2;
IF (num_cur1%Found) AND (num_cur2%Found) THEN
somme:= num1 + num2 ;
INSERT INTO sum_tab VALUES (somme);
ELSE
Exit ;
END IF;
END LOOP;
CLOSE numl_cur1 ;
CLOSE mun_cur2 ;
COMMIT;
END;
5.4.2. L'attribut %NotFound
cet attribut est de type boolen (vrai ou faux)
Pour les curseurs implicites, cet attribut est vrai si les instructions insert, update, delete ne
traitent aucune ligne. Pour les curseurs explicites, il est vrai si le fetch ne ramne plus de
ligne.
Exemple :

Declare
CURSOR num_cur1 IS SELECT num from tab1 ;
CURSOR num_cur2 IS SELECT num from tab2 ;
Num1 number ;
Num2 number ;
somme number := 0;
Begin
OPEN num_cur1 ;
OPEN num_cur2 ;
LOOP
FFTCH num_cur1 INTO num1 ;
FFTCH num_cur2 INTO num2;
EXIT WHEN (num_cur1%NotFound) OR (num_cur2%NotFound) ;
somme:= num1 + num2 ;
INSERT INTO sum_tab VALUES (somme);
END LOOP;
CLOSE numl_cur1 ;
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 55/75
CLOSE mun_cur2 ;
END;
5.4.3. L'attribut %IsOpen
Cet attribut est de type boolen soit vrai, soit faux.
Le curseur implicite est toujours faux car Oracle referme toujours les curseurs qu'il
ouvre
aprs chaque utilisation.
Le curseur explicite est vrai si le curseur est ouvert.
Exemple :
Declare
Cursor Dept10 is
Select ename, sal from emp where deptno=10;
Begin
If not (Dept10%lsopen) then
open Dept10 ;
End if,
Fetch Dept10 into
--traitement
End ;
5.4.4.'L'attribut %RowCount
Cet attribut est de type numrique. Le curseur implicite indique le nombre de lignes traits par
les ordres insert, update, delete.
Le curseur explicite est incrment chaque ordre fetch, donc cet attribut traduit la nime
ligne traite.


Exemple

Declare
cursor C1 is
select ename, empno, sal from emp order by sal desc ;
nom char(10);
numero number(4);
salaire number(7,2);
Begin
Open Cl;
Loop .
Fetch cl into nom, numro, salaire ;
exit when (c1%rowcount > 25) or (cl%notfound);
insert into temp values (salaire, numro, nom);
End Loop;
Close C1 ;
commit ;
End;
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 56/75
5.4.5. L'attribut %Rowtype

Cet attribut permet la dclaration implicite d'une structure dont les lments sont d'un type
identique aux colonnes ramenes par le curseur.
Syntaxe :
Dans la partie dclarative du bloc.

CURSOR nomcurseur IS ordre select;
nomrecord nomcurseur%Rowtype;

Les lments de la structure sont identifis par: nomrecord.nomcolonne
La structure est renseigne par le Fetch : Fetch nomcurseur into nomrecord;

Exemple

Declare
/* la fonction nvl permet de tester la valeur Null d'une colonne si comm=NULL alors nvl
retourne 0 sinon nvl retourne la valeur de comm */
cursor c1 is select sal + nvl(comm) saltot, ename from emp;
/* l'enregistrement comporte deux colonnes: saltot, ename
c1_record c1%Rowtype;
Begin
open c1;
Loop
Fetch c1 into c1_record;
Exit when c1 %notfound ;
if c1_record.saltot > 2000 then
insert into temp values (c1_record.saltot, c1_record.ename);
end if,
End Loop;
close c1;
End;

5.5. Les boucles et les curseurs
L'objectif est de fournir au programmeur une structure simple et efficace pour utiliser les
structures de boucle et les curseurs.
Declare
Cursor nomcurseur is ordre_select ;
Begin
For nomrecord in nomcurseur Loop
/* traitement
End Loop;
End;

Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 57/75
Le bloc PL/SQL ci-dessu permet d'obtenir une gnration implicite de la structure suivante :

Declare
Cursor nomcurseur is ordre select;
nomrecord nomcurseur%rowtype;
Begin
Open nomcurseur ;
Loop
Fetch nomcurseur into nomrecord ;
Exit when nomcurseur%notfound ;
/* traitement
End Loop;
Close nomcurseur;
End;
5.6. Le curseur paramtr
Il permet d'utiliser des variables dans le curseur. Principalement dans la clause where.
Il faut pour cela spcifier les noms et les types des paramtres dans la dclaration du curseur.
Cursor nomcurseur (paraml type, param2 type,...)
is select ordre_select ,

L'ordre_select utilise les paramtres.
Les types possibles sont : char, number, date, boolean sans spcifier la longueur.

Begin
Open nomcurseur (valeurl , vaieur2, ... ) ;

Exemple :

Declare
cursor c1 (depart number)
is select sal, nvl(comm,0) commi
from emp where deptno=depart ;
total number(11,2) := 0 ;
sal_sup number(4):=0 ;
comm_sup number(4):=0;
Begin
for c1_rec in c1(20) Loop
total:= total+ c1_rec.sal + c1_rec.commi ;
if c1_rec.sal > 4000
then sal_sup := sal_sup + 1 ;
end if ;
if c1_rec.commi > 3000
then commi_sup:=commi_sup+1 ;
end if;
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 58/75
End Loop;
insert into temp
values (sal_Sup, comm_sup, 'total salaire| to_Char(total));
commit ;
End;
5.7. La clause "current of"
Cette clause permet d'accder directement la ligne ramene par l'ordre Fetch afin de la
traiter (update, delete).
Il faut se rserver la ligne lors de la dclaration du curseur par le positionnement d'un
verrou d'intention : (For update of nom_colonne)
Il faut spcifier que l'on veut traiter la ligne courante au Fetch par la clause :(Where
current of nom_curseur)
Exemple :
Declare
Cursor cl is select ename, sal from emp
for update of sal ;
Begin
For c1_record in c1 Loop
If c1_ record.sal > 1500 then
insert into resultat values (c1_record.sal, c1_record.sal*1.3, c1_record.ename);
update emp set sal = sal * 1.3 where current of c1 ;
end if,
End loop ;
Commit;
End ;
6 Utilisation de sous-programmes
PL/SQL accepte aussi lutilisation de sous-programmes, nomms procdures et fonctions.
Une procdure PL/SQL excute certaines actions et peut accepter des paramtres optionnels.
Une fonction PL/SQL retourne une valeur dun certain type et peut aussi accepter des
paramtres optionnels.
6.1 Dclaration dune procdure
La syntaxe de dclaration dune procdure est :
PROCEDURE nom_procdure [(paramtre1 [, pramtreN ] IS
[dclaration des variables locales]
BEGIN
Instructions PL/SQL
[section_exception ]
END [nom_procdure]
Paramtre1 paramtreN reprsentent la dclaration des paramtres de la
procdure.
dclaration des variables locales reprsentent les dclarations optionnelles de
variables,
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 59/75
de constantes, de fonctions et de procdures locales la procdure.
section_exception est la section optionnelle de gestion des exceptions de la
procdure.
Exemple :

Declare
Vpatient_ID Patient.Patient_ID%type ;
Fivre_eleve constant real := 42 ;
Procedure enregistrer_Temp_Deg_C_Patient (patient_ID varchar2,
Temp_Corps_Deg_C real) is
Temp_Deg_F real ;
Begin
Temp_Deg_F := (9/5)* Temp_Corps_Deg_C + 32 ;
Insert into Patient (Patient_ID, Temp_Corps_Deg_F)
Values
(patient_ID, Tem_Deg_F) ;
Commit ;
End ;
Begin
Vpatient_ID := ES8888 ;
enregistrer_Temp_Deg_C_Patient (Vpatient_ID, Fivre_eleve) ;
End ;
6.2 Dclaration dune fonction
La syntaxe de dclaration dune fonction est :
FUNCTION nom_fonction[(paramtre1 [, pramtreN ]
RETURN type_donnes_fonction IS
[dclaration des variables locales]
BEGIN
Instructions PL/SQL
RETURN val__retourne
[section_exception ]
END [nom_fonction]
Exemple :
Soit lextrait suivant dune base de donnes relationnelle dune application de gestion de
scolarit dune universit :
Etudiant(codetu, nometu,adretu)
Matire(codmat, description_mat, coefmat)
Moyenne(codetu #, codmat #, moyenne_mat)

La fonction meilleur_tu_mat retourne le code du meilleur tudiant dune matire donne.

Declare
Codmatire Matire.codmat%type;
Vcode_etu etudiant.codetu%type;
FUNCTION meilleur_tu_mat (pcodmat varchar2) RETURN varchar2 IS
Vcodetu etudiant.codeetu%type ;
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 60/75
BEGIN
Select codetu into Vcodetu
From Moyenne M
Where M.moyenne_mat in (Select max(moyenne_mat from Moyenne M
Where M.codmat=pcodmat);
Return Vcodetu;
End ;
Begin
Codmatire := M001;
Vcode_etu := meilleur_tu_mat(Codmatire);
DBMS_OUTPUT.PUT_LINE(Le meilleur tudiant de la matire ||
Codmatire | est
: || Vcode_etu);
End ;


7. GESTION DES ERREURS
Le mcanisme de gestion d'erreurs dans PL/SQL est appel gestionnaire des exceptions. Il
permet au programmeur de planifier sa gestion et d'abandonner ou de continuer le traitement
en prsence d'une erreur.
Il faut affecter un traitement appropri aux erreurs apparues dans un bloc PL/SQL. C'est
pourquoi on distingue 2 types d'erreurs ou d'exceptions :
1. Erreur interne Oracle (Sqlcode <= 0) : dans ce cas la main est rendue directement au
systme environnant.
2. Anomalie dtermine par 1'utilisateur.
La solution :
1. Donner un nom l'erreur (si elle n'est pas dj prdfinie),
2. Dfinir les anomalies utilisateurs, leur associer un nom,
3. Dfinir le traitement effectuer.
7.1. Les exceptions internes
Une erreur interne est produite quand un bloc PL/SQL viole une rgle d'Oracle ou dpasse
une limite dpendant du systme d'exploitation. Les erreurs Oracle gnres par le noyau sont
numrotes, or le gestionnaire des exceptions de PL/SQL, ne sait que grer des erreurs
nommes.
Pour cela PL/SQL a redfini quelques erreurs Oracle comme des exceptions. Ainsi, pour grer
d'autres erreurs Oracle, 1'utilisateur doit utiliser le gestionnaire OTHERS ou
EXCEPTION_INIT pour nommer ces erreurs.









Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 61/75



Les exceptions fournies par Oracle sont regroupes dans ce tableau :

Nom d'exception Valeur SqlCode
CURSOR_ALREADY_OPEN -6511
DUP_VAL_ON_INDEX -1
INVALID_CURSOR -1001
INVALID_NUMBER -1722
LOGIN_DENIED -1017
NO_DATA_FOUND -1403
NOT_LOGGED_ON -1012
PROGRAM_ERROR -6501
STORAGE_ERROR -6500
TIMEOUT_ON_RESOURCE -51
TOO_MANY_ROWS -1422
TR.ANSACTION_BACKED_OUT -61
VALUE_ERROR -6502
ZERO_DIVIDE -1476




Erreur Oracle
ORA-06511
ORA-00001
ORA-01001
ORA-01722
ORA-01717
ORA-01413
ORA-01012
ORA-06501
ORA-06500
ORA-00051
ORA-01422
ORA-00061
ORA-06502
ORA-01476

Pour grer les exceptions, le programmeur doit crire un gestionnaire des exceptions qui
prend le contrle du droulement du bloc PL/SQL en prsence d'une exception.
Le gestionnaire d'exception fait partie du bloc PL/SQL et se trouve aprs les commandes Il
commence par le mot cl EXCEPTION et se termine avec le mme END du bloc.
Chaque gestion d'exception consiste spcifier son nom d'erreur aprs la clause WHEN et la
squence de la commande excuter aprs le mot cl THEN, comme le montre l'exemple
suivant:

DECLARE
Wsal emp.sal%type;
BEGIN
select sal into wsal from emp;
EXCEPTION
WHEN TOO_MANY_ROWS then
--grer erreur trop de lignes
WHEN NO_DATA_FOUND then
--grer erreur pas de ligne
WHEN OTHERS then
--grer toutes les autres erreurs
END ;









Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 62/75


7.2. Les exceptions utilisateur (externes)
PL/SQL permet l'utilisateur de dfinir ses propres exceptions. La gestion des anomalies
utilisateur peut se faire dans un bloc PL/SQL en effectuant les oprations suivantes:
1. Nommer l'anomalie (type exception) dans la partie Dclare du bloc.

DECLARE
Nom_ano Exception;
2. Dterminer lerreur et passer la main au traitement appropri par la commande
Raise.
BEGIN

If (condition_anomalie) then raise Nom_ano
3. Effectuer Ie traitement dfini dans la partie EXCEPTION du Bloc.
EXCEPTION
WHEN (Nom_ano) then (traitement);



Exemple :

DECLARE
wsal emp.sal%type ;
sal_zero Exception ;
BEGIN
Select sal into wsal from emp where empno=5;
If wsal=0 then
Raise sal_zero;
EXCEPTION
WHEN sal_zero then
-- grer erreur salaire
WHEN TOO_MANY_ROWS then...
--grer erreur trop de lignes
WHEN_NO_DATA_FOUND then ...
-- grer erreur pas de ligne
WHEN OTRERS then ...
--grer toutes les autres erreurs
END;
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 63/75
Annexe1 : Complment de cours : les fonctions

Expressions et fonctions

Une expression est un ensemble de variables (contenu d'une colonne), de constantes et de
fonctions combines au moyen d'oprateurs. Les fonctions prennent une valeur dpendant de
leurs arguments qui peuvent tre eux-mmes des expressions.
Les expressions peuvent figurer :
en tant que colonne rsultat d'un SELECT,
dans une clause WHERE,
dans une clause ORDER BY.
Il existe trois types d'expressions correspondant chacun un type de donnes de SQL :
arithmtique, chane de caractre, date. A chaque type correspondent des oprateurs et des
fonctions spcifiques.
SQL autorise les mlanges de types dans les expressions et effectuera les conversions
ncessaires : dans une expression mlangeant dates et chanes de caractres, les chanes de
caractres seront
converties en dates, dans une expression mlangeant nombres et chanes de caractres, les
chanes de caractres seront converties en nombre.
1- Expressions et fonctions arithmtiques
Une expression arithmtique peut contenir :
des noms de colonnes
des constantes
des fonctions arithmtiques
combins au moyen des oprateurs arithmtiques.
1.1 Oprateurs arithmtiques
Les oprateurs arithmtiques prsents dans sql sont les suivants :
+ addition ou + unaire
- soustraction ou - unaire
* multiplication
/ division
Remarque : la division par 0 provoque une fin avec code d'erreur.
1.2 Priorit des oprateurs
Une expression arithmtique peut comporter plusieurs oprateurs. Dans ce cas, le rsultat de
l'expression peut varier selon l'ordre dans lequel sont effectues les oprations. Les oprateurs
de
multiplication et de division sont prioritaires par rapport aux oprateurs d'addition et de
soustraction. Des parenthses peuvent tre utilises pour forcer l'valuation de l'expression
dans un ordre diffrent de celui dcoulant de la priorit des oprateurs.
1.3 Fonctions arithmtiques
Dans ce paragraphe, ont t regroupes les fonctions ayant un ou plusieurs nombres comme
arguments, et renvoyant une valeur numrique. [ROUND(n ,m )]
ABS(nb)
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 64/75
Renvoie la valeur absolue de nb.
CEIL(nb)
Renvoie le plus petit entier suprieur ou gal nb.
COS(n)
Renvoie le cosinus de n, n tant un angle exprim en radians.
COSH(n)
Renvoie le cosinus hyperbolique de n.
EXP(n)
Renvoie e puissance n.
FLOOR(nb)
Renvoie le plus grand entier infrieur ou gal nb.
LN(n)
Renvoie le logarithme nprien de n qui doit tre un entier strictement positif.
LOG(m,n)
Renvoie le logarithme en base m de n. m doit tre un entier strictement suprieur 1,
et n un entier strictement positif.
MOD(m,n)
Renvoie le reste de la division entire de m par n, si n vaut 0 alors renvoie m.
Attention, utilise avec au moins un de ses arguments ngatifs, cette fonction donne
des rsultats qui peuvent tre diffrents d'un modulo classique. Cette fonction ne
donne pas toujours un rsultat dont le signe du diviseur.
POWER(m,n)
Renvoie m puissance n, m et n peuvent tre des nombres quelconques entiers ou rels
mais si m est ngatif n doit tre un entier.
ROUND(n[,m])
Si m est positif, renvoie n arrondi (et non pas tronqu) m chiffres aprs la virgule. Si
m est ngatif, renvoie n arrondi m chiffres avant la virgule. m doit tre un entier et il
vaut 0 par dfaut.
SIGN(nb)
Renvoie -1 si nb est ngatif, 0 si nb est nul, 1 si nb est positif.

SIN(n)
Renvoie le sinus de n, n tant un angle exprim en radians.
SINH(n)
Renvoie le sinus hyperbolique de n.
SQRT(nb)
Renvoie la racine carre de nb qui doit tre un entier positif ou nul.
TAN(n)
Renvoie la tangente de n, n tant un angle exprim en radians.
TANH(n)
Renvoie la tangente hyperbolique de n.
TRUNC(n[,m])
Si m est positif, renvoie n arrondi tronqu m chiffres aprs la virgule. Si m est
ngatif, renvoie n tronqu m chiffres avant la virgule. m doit tre un entier et il vaut
0 par dfaut.
2- Expressions et fonctions sur les chanes de caractres
2.1 Oprateur sur les chanes de caractres
Il existe un seul oprateur sur les chanes de caractres : la concatnation. Cet oprateur se
note au moyen de deux caractres |(barre verticale) accols. Le rsultat d'une concatnation
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 65/75
est une chane de caractres obtenue en crivant d'abord la chane gauche de || puis celle
droite de ||.
2.2 Fonctions sur les chanes de caractres
Le paragraphe suivant contient les fonctions travaillant sur les chanes de caractres et
renvoyant
des chanes de caractres.
CONCAT(chane1,chane2)
Renvoie la chane obtenue en concatnant chane1 chane2. Cette fonction est
quivalente l'oprateur de concatnation | |.
INITCAP(chane)
Renvoie chane en ayant mis la premire lettre de chaque mot en majuscule et toutes
les autres en minuscule. Les sparateurs de mots sont les espaces et les caractres non
alphanumriques.
LOWER(chane)
Renvoie chane en ayant mis toutes ses lettres en minuscules.
LPAD(chane, long,[char])
Renvoie la chane obtenue en compltant, ou en tronquant, chane pour qu'elle ait
comme longueur long en ajoutant ventuellement gauche le caractre (ou la chane
de caractres) char. La valeur par dfaut de char est un espace.
LTRIM(chane[,ens])
Renvoie la chane obtenue en parcourant partir de la gauche chane et en
supprimant tous les caractres qui sont dans ens. On s'arrte quand on trouve un
caractre qui n'est pas dans ens. La valeur de dfaut de ens est un espace.
REPLACE(chane, avant, aprs)
Renvoie chane dans laquelle toutes les occurrences de la chane de caractres avant
ont t remplacs par la chane de caractres aprs.
RPAD(chane, n,[char])
Renvoie la chane obtenue en compltant, ou en tronquant, chane pour qu'elle ait
comme longueur long en ajoutant ventuellement droite le caractre (ou la chane
de caractres) char.La valeur par dfaut de char est un espace.
RTRIM(chane[,ens])
Renvoie la chane obtenue en parcourant partir de la droite chane et en supprimant
tous les caractres qui sont dans ens. On s'arrte quand on trouve un caractre qui n'est
pas dans ens. La valeur de dfaut de ens est un espace.
SOUNDEX(chane)
Renvoie la chane de caractres constitue de la reprsentation phontique des mots de
chane.
SUBSTR(chane, m[,n])
Renvoie la partie de chane commenant au caractre m et ayant une longueur de n.
TRANSLATE(chane, avant, aprs)
Renvoie une chane de caractres en remplaant chaque caractre de chane prsent
dans avant par le caractre situ la mme position dans aprs. Les caractres de
chane non prsents dans avant ne sont pas modifis. avant peut contenir plus de
caractres que aprs, dans ce cas les caractres de avant sans correspondants dans
aprs seront supprims de chane .
UPPER(chane)
Renvoie chane en ayant mis toutes ses lettres en majuscules.
Le paragraphe suivant contient les fonctions travaillant sur les chanes de caractres et
renvoyant des entiers.
INSTR(chane, sous-chane, dbut, occ)
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 66/75
Renvoie la position du premier caractre de chane correspondant loccurrence occ
de souschane en commenant la recherche la position dbut.
LENGTH(chane)
Renvoie la longueur de chane, exprime en nombre de caractres.
3- Expressions et fonctions sur les dates
3.1 Oprateurs sur les dates
Au moyen des oprateurs arithmtiques + et - il est possible de construire les expressions
suivantes :
date +/- nombre : le rsultat est une date obtenue en ajoutant le nombre de jours nombre

la date date.
date2 - date1 : le rsultat est le nombre de jours entre les deux dates.
3.2 Fonctions sur les dates
ADD_MONTHS(date, n)
Renvoie la date obtenue en ajoutant n mois date. n peut tre un entier quelconque.
Si le mois
obtenu a moins de jours que le jour de date, le jour obtenu est le dernier du mois.
LAST_DAY(date)
Renvoie la date du dernier jour du mois de date.
MONTHS_BETWEEN(date2, date1)

Renvoie le nombre de mois entre date2 et date1, si date2 est aprs date1 le
rsultat est positif, sinon le rsultat est ngatif. Si les jours date2 et date1 sont les
mmes, ou si ce sont les derniers jours du mois, le rsultat est un entier. La partie
fractionnaire est calcule en considrant chaque jour comme 1/31me de mois
NEXT_DAY(date, nom_du_jour)
Renvoie la date du prochain jour de la semaine dont le nom est nom_de_jour.
ROUND(date[,prcision])
Renvoie date arrondie l'unit spcifie dans prcision. L'unit de prcision est
indique en utilisant un des masques de mise en forme de la date. On peut ainsi
arrondir une date l'anne, au mois, la minute,... Par dfaut la prcision est le jour.
SYSDATE
Renvoie la date et l'heure courantes du systme d'exploitation hte.
TRUNC(date[,prcision])
Renvoie date tronque l'unit spcifie dans prcision. Les paramtres sont
analogues ceux de la fonction ROUND.
4- Fonctions de conversion
ASCII(chane)
Renvoie le nombre correspondant au code ascii du premier caractre de chane.
CHR(nombre)
Renvoie le caractre dont nombre est le code ascii.
TO_CHAR(nombre, format)
Renvoie la chane de caractres en obtenue en convertissant nombre en fonction de
format.
Format est une chane de caractres pouvant contenir les caractres suivants :
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 67/75
9 reprsente un chiffre (non reprsent si non significatif)
0 reprsente un chiffre (reprsent mme si non significatif)
. point dcimal apparent
V dfinit la position du point dcimal non apparent
, une virgule apparatra cet endroit
$ un $ prcdera le premier chiffre significatif
B le nombre sera reprsent par des blancs s'il vaut 0
EEEE le nombre sera reprsent avec un exposant (le spcifier avant MI ou PR)
MI le signe ngatif sera droite
PR un nombre ngatif sera entre <>
TO_CHAR(date, format)
Renvoie conversion d'une date en chane de caractres. Le format indique quelle partie
de la date doit apparatre, c'est une combinaison des codes suivants :
Scc sicle avec signe
Cc sicle
sy,yyy anne (avec signe et virgule)
y,yyy anne( avec virgule)
yyyy anne
yyy 3 derniers chiffres de l'anne
yy 2 derniers chiffres de l'anne
y dernier chiffre de l'anne
q numro du trimestre dans l'anne
ww numro de la semaine dans l'anne
w numro de la semaine dans le mois
mm numro du mois
ddd numro du jour dans l'anne
dd numro du jour dans le mois
d numro du jour dans la semaine
hh ou hh12 heure (sur 12 heures)
hh24 heure sur 24 heures
mi minutes
ss secondes
sssss secondes aprs minuit
j jour du calendrier julien
Les formats suivants permettent d'obtenir des dates en lettres ( en anglais) :
syear ou year anne en toutes lettres
month nom du mois
mon nom du mois abrg sur 3 lettres
day nom du jour
dy nom du jour abrg sur 3 lettres

am ou pm indication am ou pm
bc ou ad indication avant ou aprs jsus christ
Les suffixes suivants modifient la prsentation du nombre auquel ils sont accols :
Th ajout du suffixe ordinat st, nd, rd, th
Sp nombre en toutes lettres
Tout caractre spcial insr dans le format sera reproduit tel quel dans la chane
de
caractres rsultat.
TO_DATE(chane, format)
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 68/75
Permet de convertir une chane de caractres en donne de type date. Le format est
identique celui de la fonction TO_CHAR.
TO_NUMBER(chane)
Convertit chane en sa valeur numrique.
Remarque : On peut galement insrer dans le format une chane de caractres
quelconque, condition de la placer entre guillemets"".
5- Autres fonctions
GREATEST(expr1, expr2,...)
Renvoie la plus grande des valeurs expr1, expr2,.... Toutes les expressions sont
converties au format de expr1 avant comparaison.
LEAST
Renvoie la plus petite des valeurs expr1, expr2,.... Toutes les expressions sont
converties au format de expr1 avant comparaison.
NVL(expr_1, expr_2)
Prend la valeur expr_1, sauf si expr_1 est NULL auquel cas NVL prend la valeur
expr_2.
Une valeur NULL en SQL est une valeur non dfinie.
Lorsque l'un des termes d'une expression a la valeur NULL, l'expression entire prend la
valeur NULL.
D'autre part, un prdicat comportant une comparaison avec une expression ayant la
valeur NULL prendra toujours la valeur faux. La fonction NVL permet de remplacer
une valeur NULL par une valeur significative.
DECODE(crit, val_1, res_1 [, val_2, res_2 ...], def)
Cette fonction permet de choisir une valeur parmi une liste d'expressions, en fonction
de la
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 69/75


Annexe 2 : Gestion des utilisateurs et des privilges



Lintroduction dun nouvel utilisateur ncessite de crer lutilisateur par lordre CREATE
USER puis de lui allouer des prvileges par GRANT et ALTER USER. Ensuite il est tout
moment possible de modifier ses allocations de ressources par lexcution dun nouvel ordre
GRANT ou ALTER USER ou par excution dun ordre REVOKE .

I-Gestion des utilisateurs :

1-Cration dun utilisateur :
seffectue par lordre CREATE USER, de syntaxe :
CREATE USER nom_utilisateur
IDENTIFIED {BY mot de passe | EXTERNALLY }
[DEFAULT TABLESPACE nom_tablespace ]
[TEMPORARY TABLESPACE nom_tablespace]
[QUOTA [nombre/UNLIMITED] ON nom_tablespace]
[PASSWORD EXPIRE]
[ACCOUNT { LOCK | UNLOCK} ]


La vue DBA_USERS du dictionnaire de donnes permet de consulter la liste des
caractristiques des utilisateurs de la base de donnes.
A la ctration de la BD, deux utilisateurs prviligs, SYS et SYSTEM, sont automatiquement
cres.
La connexion au compte SYSTEM permet de crer les autres utilisateurs.Lutilisateur SYS est
propritaire de la majorit des tables de dictionnaire ainsi que des vues cees sur ces tables.



EXTERNALLY : permet de crer un utilisateur qui a memes noms et mot de passe
quun utilisateur dfini au niveau systme dexploitation.Cette possibilit vite la
saisie de mot de passe lors des connexions Oracle. Le nom de lutilisateur pour la
comande CREATE USER, est alors compos de prfixes OP$$ suivi du nom de
lutilisateur au niveau systme
DEFAULT TABLESPACE nom_tablespace: dfinit le tablespace qui sera utilis par
dfaut lors de la cration dune table par lutilisateur (ordre CREATE TABLE). SI
cette clause nest pas utilise, les tables sont par dfaut cres dans le tablespace
SYSTEM.
TEMPORARY TABLESPACE nom_tablespace: dfinit le tablespace qui sera utilis
par dfaut lorsque le systme aura besoin despace de travail.Sii cette clause nest pas
utilise, les zones de travail temporaires sont implante dans le tablespace SYSTEM.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 70/75
QUOTA [nombre/UNLIMITED] ON nom_tablespace :permet de limiter(nombre)
ou non(UNLIMITED) lespace qui pourra etre allou pour les tables de lutilisateur
dans le tablespace . La valeur peut etre exprime en KO ou en MO.
PASSWORD EXPIRE : demande le changement de mot de passe.
ACCOUNT :{LOCK|UNLOCK} :verrouille ou active.

2-Modification dun utilisateur :
La clause ALTER USER de syntaxe :
ALTER USER nom_utilisateur
IDENTIFIED {BY mot de passe | EXTERNALLY }
[DEFAULT TABLESPACE nom_tablespace ]
[TEMPORARY TABLESPACE nom_tablespace]
[QUOTA [nombre/UNLIMITED] ON nom_tablespace]
[PASSWORD EXPIRE]
[ACCOUNT { LOCK | UNLOCK} ]

Qui permet de modifier :
Le mot de passe
Le tablespace utilis par dfaut lors de cration dun objet
etc.

3-Suppression dun utilisateur
DROP USER schma [CASCADE] ;
Sans loption CASCADE, lutilisateur nest pas supprim sil est propritaire dobjets. Avec
loption CASCADE, lutilisateur est toujours supprim et tous les objets dont il est le
propritaire sont aussi supprims.


II-Gestion des privilges :

1-Gestion des privilges au niveau systme :
a-Attribution dun privilge:

Un privilge au niveau systme , ou un role, peut etre attribu un utilisateur par lordre
GRANT de syntaxe :
GRANT privilge systme [, privilge systme . ..]
TO nom_utilisateur , nom_utilisateur2, | PUBLIC
[WITH ADMIN OPTION]

WITH ADMIN OPTION autorise celui qui a recu le privilge le transmettre un autre
utilisateur.
PUBLIC : permet daffecter le privilge tous les utilisateurs

Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 71/75
b- Suppression dun systme :
Un privilge peut etre enlev un utilisateur par lordre REVOKE de syntaxe :
REVOKE privilge1, privilge2..
FROM utilisateur, utilisateur | PUBLIC

c- Exemple de privilge systme :
ALTER SESSION, ALTER USER, CREATE TABLE, DROP USER, UPDATE
ANY TABLE,

2-Gestion de privilges objets
a-Attribution de privilges :
Un utilisateur (crateur) qui cre un objet tous les droits sur celui ci, les autres utilisateurs
(sauf DBA) nont aucun droit. Le crtaeur peut donnner des droits soit de facon selective
quelques utilisateurs, soit tous les utilisateurs.
Lattribution dun privilge objet se fait par lordre GRANT, de syntaxe :


GRANT privilge objet [, privilge objet,]
ON [shema .] objet
TO nom_utilisateur,nom_utilisateur..| PUBLIC
[WITH GRANT OPTION]
Ou objet peut etre un nom de : table, vue, procdure fonction.
b-suppression de privilge :
Tout droit accord peut etre supprim par lordre REVOKE , selon la syntaxe :

REVOKE privilge objet, [ ; privilge objet..] | ALL PRIVILEGES
ON object
FROM utilisateur ; | PUBLIC

c- exemple de privilges objets
SELECT, INSERT, UPDATE , ALTER, ALL
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 72/75

Annexe 3 : Gestion dune base de donnes

1- Cration dune base de donnes:

i- Lordre CREATE DATABASE

Lors de linstallation dOracle, une base par dfaut peut tre crer .IL est ensuite possible soit
de modifier la structure ce cette base pour ladapter des besoins spcifiques, soit de crer
une autre base. Aprs installation de logiciel, la cration de la BD se fait par lordre CREATE
DATABASE selon la syntaxe :

CREATE DATABASE nom_base
[CONTROLFILE REUSE]
[LOGFILE, fichier [,fichier] ]
[MAXLOGFILES valeur]
[MAXLOGMEMBERS valeur]
[MAXLOGHISTORY valeur]
[DATAFILES fichier [,fichier] ]
[MAXDATAFILES valeur]
[MAXINSTANCES valeur]
[ARCHIVLOG | NOARCHIVELOG]

Exemple :
Cration dune bd de nom airbase sous Windows avec un seul fichier de donnes
de 50 MO et deux fichiers de reprise de 1 MO chacun :
create database airbase
datafile c:\orahome\data\airbus\df.dbf size 50 M
maxdatafiles 5
logfiles c:\orahome\log\logfile1airbus.dbf size 1 M
c:\orahome\log\logfile2airbus.dbf size 1 M

maxlogfiles 10 ;

2i- Paramtres de lordre CREATE DATABASE :

* nom_base : le nom donne la BD,
* CONTROLFILE REUSE : utilis uniquement en cas de cration dune base suite la
suppression dune base existante ; permet de rutiliser les fichiers de contrle de la base
prcdente .
* LOGFILE fichier : Dfinit les fichiers de reprise( redo log file), qui enregistrent toutes les
modifications effectues sur les donnes de la base aucours dune transaction.Ceci permet de
redmarrer aprs un incident (CPU, mmoire, disque).
* MAXLOGFILES valeur : dfinit le nombre maximal de fichiers de reprise qui peuvent etre
associs la base.
* MAXLOGMEMBERS valeur : dfinit le nombre maximal de copies pour un fichier de
reprise.
Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 73/75
* MAXLOGHISTORY valeur : dfinit le nombre maximal de fichiers archive pour les
fichiers de reprise.
* DATAFILES fichier : dfinit le ou les fichiers contenant les donnes de la base.
* MAXDATAFILES valeur : nombre maximal de fichiers de donnes qui peuvent tere
associs la base.
* MAXINSTANCES valuer : nombre maximal dinstances pouvant accder simultannment
la base. Cette valeur dpend de systme dexploitation.
* ARCHIVLOG : positionne la fonctionnement de la base en mode archivage. Suppose
lutilisation dau moins deux fichiers de reprise : pendant que lun est utilis en jounalisation,
le second est automatiquement archiv sur un autre support avant sa rutilisation.
* NOARCHIVLOG : positionne le fonctionnement de la base en mode sans archivage.



2- Dmarrage de la base :
La mise en ouvre dune BD seffectue en trois tapes, au moyen des commandes STARTUP
et ALTER DATABASE ::
dmarrage dune instance, qui consiste initialiser lenvironnement de la BD en
allouant les ressources ncessaires. La base est alors dans ltat dmarre non
monte (NOMOUNT).
dmarrage de la base : qui consiste associer une base linstance cre ltape
prcdente. La base passe ltat dmarre et monte (MOUNT). Elle est alors
accessible en mode INTERNAL aux utilisateurs qui ont le privilge
dadministration qui peuvent effectuer des oprations de maintenance tel que
renommer les fichiers de la base ou grer les fichiers de reprise.
Ouverture de la base : qui consiste rendre les donnes de la base accessibles aux
utilisateurs. La base passe ltat ouverte (OPEN).
Exemples :
Cration de linstance :
SQL> startup nomount ;
Dmarrage de la base :
SQL>connect internal ;
SQL>alter database airbase mount ;
Ouverture de la base
SQL>alter database airbase open ;


3- Arrt de la base :
Pour fermer une base de donnes, il faut successivement dconnecter les utilisateurs, dtacher
la base de linstance puis arreter linstance.
Lors de la fermeture, le serveur enregistre dans les fichiers de reprise toutes les informations
ncessaires un redmarrage sans erreur.
Pour arreter une base, il faut avoir un prvilege de niveau administrateur et utiliser lordre
SHUTDOWN. Cet ordre comporte trois options :
SHUTDOWN [ ABORT | IMMEDIATE | NORMAL]

Cours SGBD Oracle Hosni.A & Boukchim.M
A.U 2007/2008 74/75
Avec loption NORMAL,aucune nouvelle connexion ,nest plus admise. Larrt se produit
lorsque le dernier utilisateur se dconnecte. Toutes les transactions sont termines
normalement.
Avec loption IMMEDIATE, larrt est immdiat ,sans attente de la fin des transactions en
cours, qui sont alors annules.
Avec loption ABORT , larrt est immdiat , sans dtachement de la base ni dconnexion
pralable des utilisateurs. Il sagit du mode de fermeture le plus rapide. En revanche, une
procdure de reprise est ncessaire lors de redmarrage de la base .Cette solution nest
utiliser quen cas de problme grave.












































Bibliographie



Oracle Corporation Documentation

NETG Documentation Skill Builder
Network Education Training Group


Pack OCP DBA Oracle 9i EXAM
Edition : Oracle Press

Les bases de donnes Oracle 8i
Dveloppement, administration ,optimisation
Auteur :Roger Chapuis
Edition DUNOD

Bases de donnes Objet et Relationnel
Auteur :Georges Gardarin
Edition EYROLLES


SGBD avancs : Bases de donnes objets, dductives, rparties.
Auteurs :G.Gardarin, P.valduriez
Edition EYROLLES


Netographie


www.developpez.com/cours/sql-Oracle
www.oracle.com
www.otn.com