Académique Documents
Professionnel Documents
Culture Documents
Cours SGBDoracle PDF
Cours SGBDoracle PDF
Support de cours
SGBD
Ralis par :
BOUKCHIM Mosaab
(AT-Iset de Kef)
HOSNI Anis
(AT-Iset de Kef)
PLAN
6 Utilisation de sous-programmes.....................................58
6.1 Dclaration dune procdure ...................................................................................... 58
6.2 Dclaration dune fonction......................................................................................... 59
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 :
-
Objectifs spcifiques :
Objectifs spcifiques
Avoir une ide sur lvolution des SGBD.
Elments de contenu
Dfinition de BD
Dfinition de SGBD
Architecture ANSI/SPARC
Les trois gnrations des SGBD
PRIMARY KEY
FOREIGN KEY
UNIQUE
CHECK
NOT NULL
- CREATE DATABASE
- CREATE TABLE
- ALTER TABLE
Lordre SELECT
Les fonctions de groupe
Les jointures
Les sous interrogations
Les oprateurs ensemblistes
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
Netographie
www.developpez.com/cours/sql-Oracle
www.oracle.com
www.otn.com
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.
Niveau
interne
A.U 2007/2008
4/75
A.U 2007/2008
5/75
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.
A.U 2007/2008
6/75
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)
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.
A.U 2007/2008
7/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.
A.U 2007/2008
8/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
A.U 2007/2008
9/75
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
A.U 2007/2008
10/75
Si quelque chose vous semble inexacte, il est encore temps de revenir en arrire pour apporter
les corrections voulues.
A.U 2007/2008
11/75
... 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.
Manual
Manual
OraclOracle9iAgent
Automatic
OracleOracle9iClientCache
Manual
A.U 2007/2008
12/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.
A.U 2007/2008
13/75
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.
A.U 2007/2008
14/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.
A.U 2007/2008
15/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).
A.U 2007/2008
16/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.
A.U 2007/2008
17/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.
A.U 2007/2008
18/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.
A.U 2007/2008
19/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.
A.U 2007/2008
20/75
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.
A.U 2007/2008
21/75
A.U 2007/2008
22/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).
A.U 2007/2008
23/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.
A.U 2007/2008
24/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
A.U 2007/2008
25/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.
A.U 2007/2008
26/75
Voil, calibr sur ce que nous avions spcifi lors de la configuration des utilisateurs
Nous attribuons maintenant un nom au service rseau prcdemment cr. Il va nous faciliter
la tche plus tard.
A.U 2007/2008
27/75
Il est possible de configurer plusieurs services. Nous ne sommes pas intresss ici.
A.U 2007/2008
28/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=
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
COMMENTS
VARCHAR2(30)
VARCHAR2(4000)
SQL>exit
A.U 2007/2008
29/75
Chapitre 3 : SQL
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.
A.U 2007/2008
30/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.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
A.U 2007/2008
31/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.2 Dfinitions :
Les fonctions de groupe agissent sur des groupes de lignes et donne un rsultat par groupe
Table emp
empno
1100
.. CLERK
1110
job
SALESMAN
sal
500
600
MAX(sal)
.
..
A.U 2007/2008
moyenne
somme
plus petite des valeurs
plus grande des valeurs
nombre de lignes
nombre de valeurs non nulles de la
colonne
nombre de valeurs non nulles
distinctes
32/75
MAX(hiredate)
26-MAR-1992
A.U 2007/2008
33/75
1100
.. CLERK
1110
job
SALESMAN
sal
500
600
Deptno
AVG(sal)
10
20
30
1500
1300
1350
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 ;
A.U 2007/2008
34/75
A.U 2007/2008
35/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) ;
36/75
Il a fallu ici renommer la table emp de l'interrogation principale pour pouvoir la rfrencer
dans la sous-interrogation.
A.U 2007/2008
37/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) ;
A.U 2007/2008
38/75
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.
A.U 2007/2008
39/75
40/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' ;
A.U 2007/2008
41/75
A.U 2007/2008
42/75
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)) ;
A.U 2007/2008
43/75
A.U 2007/2008
44/75
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)
REMARQUES :
Les sections DECLARE et Exception sont optionnelles
Chaque instruction de nimporte quel section doit se terminer par un ;
A.U 2007/2008
45/75
A.U 2007/2008
46/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
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.
A.U 2007/2008
47/75
48/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;
A.U 2007/2008
49/75
END ;
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;
A.U 2007/2008
50/75
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.
51/75
OPEN DEPT_10
/* traitement des lignes*/
CLOSE DEPT_10
A.U 2007/2008
52/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;
Curseurs explicites
Nomcurseur%Found
Nomcurseur %Notfound
Nomcurseur %Isopen
Nomcurseur %Rowcount
Nomcurseur %Rowtype
53/75
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 ;
A.U 2007/2008
54/75
CLOSE mun_cur2 ;
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;
A.U 2007/2008
55/75
Exemple
Declare
/* la fonction nvl permet de tester la valeur Null d'une colonne si comm=NULL alors nvl
A.U 2007/2008
56/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;
A.U 2007/2008
57/75
End Loop;
insert into temp
values (sal_Sup, comm_sup, 'total salaire| to_Char(total));
commit ;
End;
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.
procdure.
dclaration des variables locales reprsentent les dclarations optionnelles de
variables,
A.U 2007/2008
58/75
59/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 ;
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.
A.U 2007/2008
60/75
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 ;
A.U 2007/2008
61/75
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;
A.U 2007/2008
62/75
A.U 2007/2008
63/75
Renvoie e puissance n.
FLOOR(nb)
A.U 2007/2008
64/75
est une chane de caractres obtenue en crivant d'abord la chane gauche de || puis celle
droite de ||.
LOWER(chane)
RPAD(chane, n,[char])
A.U 2007/2008
65/75
la date date.
date2 - date1 : le rsultat est le nombre de jours entre les deux dates.
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 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)
SYSDATE
Renvoie la date et l'heure courantes du systme d'exploitation hte.
TRUNC(date[,prcision])
Renvoie date tronque
4- Fonctions de conversion
ASCII(chane)
A.U 2007/2008
66/75
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)
A.U 2007/2008
67/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)
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
A.U 2007/2008
68/75
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 .
A.U 2007/2008
69/75
A.U 2007/2008
70/75
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
A.U 2007/2008
71/75
A.U 2007/2008
72/75
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]
A.U 2007/2008
73/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.
A.U 2007/2008
74/75
Bibliographie
Netographie
www.developpez.com/cours/sql-Oracle
www.oracle.com
www.otn.com