Sunteți pe pagina 1din 183

Bases de donnes

2004 - 2005
Mihaela Mathieu
mathieu@emse.fr
Bases de donnes 2004-2005
Objectifs :
comprendre et matriser les fonctions dun SGBDrelationnel (Oracle et MySQL)
connatre le langage SQL
savoir dvelopper une application sous Oracle et MySQL
c M. Mathieu 2
Bases de donnes 2004-2005
Contenu du cours :
Introduction aux SGBD(R)
historique
dnitions, panorama du march
prsentation dOracle et de SQL*Plus
prsentation de MySQL
Manipulation et description des objets dune base - langage SQL
Systme transactionnel
Administration systme dOracle
catalogues de donnes
gestion des utilisateurs
c M. Mathieu 3
Bases de donnes 2004-2005
Programmation et bases de donnes
programmation en PL/SQL
Java et le SGBD (Oracle)
c M. Mathieu 4
Bases de donnes 2004-2005
Contenu TP :
travail avec Oracle (SQL, PL/SQL, C, Java) depuis une plate-forme Windows
ou Unix
Contenu TD :
* rappel du modle relationnel
c M. Mathieu 5
Bases de donnes 2004-2005
Le cours ne comprend pas :
progammation C pour les bases de donnes
aspects XML
module Oracle Web
... dautres modules dOracle
notions de bases de donnes OLAP, bases de donnes distribues
c M. Mathieu 6
Bases de donnes 2004-2005
Pr-requis :
logique
cours Systmes dInformations
c M. Mathieu 7
Bases de donnes 2004-2005
Chapitre 1 :
Introduction aux SGBD(R)
1. Dnitions
2. tat du march
3. Prsentation dOracle et de SQL*Plus
4. Prsentation de MySQL
c M. Mathieu 8
Bases de donnes 2004-2005
Base de donnes = collection structure de donnes cohrentes, intgres, prot-
ges et accessibles simultanment aux utilisateurs.
Systme de Gestion de Bases de Donnes = logiciel complexe capable dassurer
lexploitation correcte et efcace des BD.
BD au coeur des Systmes dInformation importance capitale de la qualit,
de la abilit et de la bonne exploitation des SGBDs.
Volume dune BD : entre 1 MegaBytes et 10
?
TeraBytes.
La taille dune BD doit tre transparente lutilisateur et au dveloppeur (-), de
mme pour son dploiement.
c M. Mathieu 9
Bases de donnes 2004-2005
Une reprsentation dune BD :
Schma conceptuel
Schma physique
Mmoire (externe)
Schma externe Schma externe
c M. Mathieu 10
Bases de donnes 2004-2005
Le schma conceptuel indique la faon dont les donnes sont modlises,
structures (selon le modle choisi : relationnel, objet ou autre; les tables et les
indexes, les procdures ...)
Le schma physique indique comment dont les structures choisies sont im-
plantes physiquement. Tout est stock en mmoire.
Les schmas externes sont ddies aux utilisateurs et donnent des vues (par-
tielles) des donnes de la base.
c M. Mathieu 11
Bases de donnes 2004-2005
Les acteurs dune BD :
utilisateurs : nafs, occasionnels, avertis
dveloppeurs
administrateurs (DBA) : administrateurs de donnes et administrateurs sys-
tme
experts
c M. Mathieu 12
Bases de donnes 2004-2005
Schma conceptuel
Schma physique
Mmoire (externe)
Schma externe Schma externe
DBA
EXPERT
UTILISATEUR
DEVELOPPEUR
c M. Mathieu 13
Bases de donnes 2004-2005
Plusieurs congurations sont possibles :
une BD sur une seule machine
plusieurs BD sur la mme machine
une BD sur plusieurs machines (BD distribue)
Une BD peut admettre 1 ou plusieurs utilisateurs simultans.
Pour nimporte quelle conguration le SGBD doit assurer le bon fonction-
nement dans la transparence.
Un SGBD doit assurer :
la dnition des bases de donnes et des objets contenus
la manipulation des donnes
la condentialit
lintgrit des donnes
la scurit de fonctionnement
la gestion des accs concurrents
c M. Mathieu 14
Bases de donnes 2004-2005
Les SGBD ont un modle de reprsentation des donnes.
Classication de SGBD selon leur modle :
relationnel
rseau, hirarchique (plus maintenant)
orient objet (pass de mode). Exemple : O2
XML
Les fonctions dun SGBD sont indpendantes du modle de reprsentation des
donnes, mais la ralisation de ces fonctions y dpend.
Quelques SGBD :
petits (bureautique) : Paradox, MS Access
moyens SGBD : dBASE, FoxPro
de taille importante : Oracle, DB2, SQL Server, Ingres
logiciel libre : MySQL, PostgeSQL.
Le prix dun SGBD varie entre 100 et quelques 10
6
euros.
c M. Mathieu 15
Bases de donnes 2004-2005
MySQL - logiciel libre
- SGBD relationnel, client/serveur
- facile installer et utiliser
- supporte mal les gros volumes de donnes
- langage SQL rduit par rapport au standard
- assure mal la cohrence et la consistence de donnes
c M. Mathieu 16
Bases de donnes 2004-2005
ORACLE - SGBD produit depuis 1975 par Oracle Corporation
- SGBD priodiquement mis jour et en volution (dernires versions : 9i et
10G). Version utilise 8.1.7.
SGBD relationnel (qui tolre des reprsentations objets depuis la version 8
et des traitements RI et en langage XML depuis la version 9).
Pourquoi Oracle?
utilise SQL trs proche du standard comme langage dinterrogation
able
multi-utilisateurs
comporte toutes des fonctions des SGBD
possibilit de dvelopper des applications varies
trs rpandu en milieu industriel
(les moins : administration assez lourde pour des gros volumes de donnes, son prix)
c M. Mathieu 17
Bases de donnes 2004-2005
Les composants dOracle :
SQL*Plus : permet de description et la manipulation des donnes travers
le langage SQL
SQL*Loader, SQL*Net, SQL*Admin
compilateur Pro*C
Oracle Entreprise Manager
OracleWeb : dveloppement des application Web
Portail dentreprise, gestionnaire de documents papiers et multimdia
Oracle JDevelopper : ralisation des applications multi-fonctions, multi-fentres
sur la BD
...
Architecture Client /Serveur sur des serveurs Unix, Windows (NT, XP ...), Linux et
clients PC, Linux, Unix.
c M. Mathieu 18
Bases de donnes 2004-2005
Les objets quOracle manipule :
pour la manipulation des donnes :
les tables
les squences
les indexes
les synonymes
les clusters - jointure physiques sur plusieurs tables (distantes)
pour les traitements :
les fonctions et procdures stockes et/ou appeles explicitement
les triggers - procdures dclenches lors des vnements prcis
les assertions - procdures de vrications lances systmatiquement
pour la gestion des utilisateurs
les users et leurs droits explicites
c M. Mathieu 19
Bases de donnes 2004-2005
Les mta-donnes dOracle :
des tables spciques avec des informations sur des objets de la mme
catgorie
Oracle sait aussi grer les transactions.
Une base Oracle peut sinterfacer facilement avec une autre base Oracle ou
autre.
Des nombreux logiciels de dveloppement dapplications travaillent sur les
bases Oracle (Swing, PowerBuilder, OpenRoad, ....)
c M. Mathieu 20
Bases de donnes 2004-2005
Prsentation SQL*Plus
SQL*Plus est un outil dOracle pour interroger la BD.
fonctionne comme un interprteur en ligne
En entre :
des commandes propres
des ordres SQL
des procdures PL/SQL
des chiers SQL
Il est appel avec la commande :
>sqlplus nom utilisateur@base.localisation[/mot de passe]
c M. Mathieu 21
Bases de donnes 2004-2005
Exemple 1 :
SQL>desc agent ou SQL>describe agent
commande SQL*PLUS qui indique la structure de lobjet agent.
quivalent :
SQL > desc -
agent
Exemple 2 :
SQL > select *
from agent;
(toutes les instructions SQL nissent par les caractre; )
Exemple 3 :
SQL > @fichier.sql excute les ordres contenus dans fichier.sql
c M. Mathieu 22
Bases de donnes 2004-2005
Architecture Oracle utilise :
Oracle 8.1.7 en client/serveur sur educusers (le serveur) et optxy et asixy
(les clients Sun) et PC (les clients Windows).
c M. Mathieu 23
Bases de donnes 2004-2005
Chapitre 2 :
Types de donnes
Les tables dune BD relationnel se composent des attributs qui contiennent
des donnes. Chaque attribut a un type de donnes prcis.
Les types de donnes sous SQL :
tous les types sont simples (pas de types composs, pas de rfrences ...)
ordonns ou pas, indexables ou pas
c M. Mathieu 24
Bases de donnes 2004-2005
Les types de donnes sont les suivants :
Chanes de caractres :
VARCHAR2(taille) : taille variable dau plus 2000 caractres (VARCHAR
sous MySQL)
CHAR(taille) :taille xe dau plus 255 caractres
LONG : au plus 2 10
9
caractres
non-indexable
un seul champ LONG par table
c M. Mathieu 25
Bases de donnes 2004-2005
Nombres :
NUMBER(n,v) : n chiffres, v chiffres aprs la virgule (DECIMAL sous
MySQL)
INTEGER
FLOAT
Dates :
DATE : date et heure
type ordonn
permet des oprations numriques
(elle est visible comme une chane de caractres selon le format de
sortie)
Donnes binaires :
RAW(taille) : jusqu 255 octets
LONG RAW : jusqu 2 Giga Octets
pareil que long
pb pour la rcupration de la valeur
c M. Mathieu 26
Bases de donnes 2004-2005
Les constantes :
texte : dlimites par des apostrophes ou guillemets : Chane ou Chaine
numriques : nombre entiers ou virgule : 12, 12,5 ou 12.5
valeurs logiques : TRUE, FALSE
la date courante : SYSDATE (ou NOW sous MySQL)
lobjet NULL
manque de donnes, vide
c M. Mathieu 27
Bases de donnes 2004-2005
La valeur NULL :
dsigne un manque de donnes
0 nest pas NULL
si une expression contient NULL, est vaut NULL
la comparaison avec NULL : IS NULL , est pas = NULL
La fonction NVL permet de corriger dans des expressions une possible va-
leur NULL :
NVL (attribut, valeur par-dfaut)
La fonction COALESCE est une extension de NVL en admettant un nombre
variable de paramtres, elle retourne la premire valeur non nulle rencon-
tre dans la liste de ses paramtres.
c M. Mathieu 28
Bases de donnes 2004-2005
Fonctions de conversion :
TO CHAR : numrique ou date -> chane de caractres
TO NUMBER : chane ->numrique
TO DATE : chane -> date
Autres fonctions :
GREATEST, LEAST
Opration et fonctions pour le type DATE :
oprations + et - avec la signication :
date +|- nombre : ajout ou suppression dun nombre de jours de la date
date1 - date2 : le nombre de jours entre les deux dates
calcul de dates : LAST DAY, NEXT DAY, ADD MONTHS
c M. Mathieu 29
Bases de donnes 2004-2005
La table DUAL
est cre par dfaut par Oracle et accessible par tous les utilisateurs
ne contient quun champ DUMMY avec la valeur C
est utilise pour obtenir des valeurs calcules sur la base des constantes
Oracle
Exemple :
SELECT SYSDATE FROM DUAL;
c M. Mathieu 30
Bases de donnes 2004-2005
Chapitre 3 :
Langage SQL
1. Manipulations (interrogations et modications des objets donnes dune base)
2. Descriptions (crations, modications, suppressions)
3. Contrle (gestion des transactions).
c M. Mathieu 31
Bases de donnes 2004-2005
SQL = Structured Query Language
1980 - version stable
issu de QUEL sur Ingres et SEQUEL sur SYSTEM R (IBM)
langage non-procdural
langage interactif
Trois dimensions du langage :
dnition et modication du schma dune base de donnes relationnelle
interrogation et modication (non-procdurale) de la base
contrle de scurit et condentialit de la base.
Une commande SQL est souvent appele requte.
SQL ne fait pas la diffrence entre les petites et les grandes lettres (sauf
lintrieur des chanes de caractre).
c M. Mathieu 32
Bases de donnes 2004-2005
1. Consultation de donnes - une seule commande :
SELECT [ALL/DISTINCT/UNIQUE]
liste de slection
FROM nom table, ...
[WHERE condition de recherche]
[GROUP BY liste attributs]
[HAVING condition de recherche]
[ORDER BY liste attributs]
ou une version qui opre avec des ensembles :
requte SELECT1 {UNION | MINUS | INTERSECT} requte SELECT2
car le rsulat dune requte SELECT est un ensemble de tuples, i.e. une table.
c M. Mathieu 33
Bases de donnes 2004-2005
On apple clause une partie dune requte.
Les clauses SELECT et FROM sont obligatoires.
La clause SELECT contient la liste de slction ainsi que des descripteurs
pour la prsentation du rsultat.
La liste de slection contient : des attributs, des expressions o des attri-
buts ou des constantes interviennent. Un attribut est sous la forme champs ou
table.champs.
Le symbole * dans la liste de slection signie tous les champs de la table.
Exemple :
SELECT * FROM LECTEUR;
fournit tous les enregistrements de cette table.
c M. Mathieu 34
Bases de donnes 2004-2005
SELECT NOM, PRENOM, AGE FROM LECTEUR
fournit uniquement les champs indiqus de la table, prsents enregistrement par
enregistrement.
Les options DISTINCT, UNIQUE assurent la non-redondance du rsultat (op-
tion implicite : ALL, donc rdondance).
Exemple :
SELECT PRENOM FROM LECTEUR;
fournit tous les champs PRENOM des enregistrements de cette table, mme les
doublons.
SELECT DISTINCT PRENOM FROM LECTEUR
fournit lensemble des champs PRENOM, donc sans les doublons.
c M. Mathieu 35
Bases de donnes 2004-2005
La clause FROM contient une liste dau moins une table avec ou sans syno-
nyme pour une criture quivalente plus rapide.
Exemple : les deux requtes ci-dessous sont strictement quivalentes :
SELECT NOM, PRENOM, AGE FROM LECTEUR
et
SELECT L.NOM, L.PRENOM, L.AGE FROM LECTEUR L
Une vue ou un synonyme se comporte dans une requte SELECT comme une
table.
(On se concentre pour linstant sur les requtes SELECT qui oprent sur une
seule table).
c M. Mathieu 36
Bases de donnes 2004-2005
La clause ORDER BY permet dafcher les rsultats selon des champs pr-
sents dans sa liste de slection. Le tri peut tre croissant (option ASC - implicite)
ou dcroissant (option DESC).
La liste de la clause ORDER BY contient des lments de mme type que la
clause SELECT (sauf le *) et / ou des numros.
Exemple :
SELECT NOM, PRENOM FROM LECTEUR ORDER BY AGE
et
SELECT NOM, PRENOM , AGE FROM LECTEUR ORDER BY 3
Les numros font rfrence aux lments de la clause SELECT.
En absence de cette clause les rsultats sont prsents dans leur ordre dob-
tention par le systme.
c M. Mathieu 37
Bases de donnes 2004-2005
Les conditions de recherche sont formes dune ou plusieurs conditions relies
par les oprateurs logiques : NOT, AND et OR. Ces conditions sont de 3 types :
conditions de comparaisons
conditions de jointure
conditions sous-requte
c M. Mathieu 38
Bases de donnes 2004-2005
Conditions de comparaison permettent de comparer un attribut ou une expres-
sion un autre attribut ou valeur.
La syntaxe est :
exp oprateur comparaison exp
exp [NOT] BETWEEN exp AND exp
exp [NOT] IN (liste valeurs)
attribut [NOT] LIKE chane
attribut IS [NOT] NULL
exp dsigne une expression forme des attributs, constantes, fonctions relis
par les oprateurs : +, -, *, /, ||. Les oprateurs de comparaisons sont ceux connus.
Exemple :
SELECT * FROM LECTEUR
WHERE AGE < 10 ;
c M. Mathieu 39
Bases de donnes 2004-2005
Le prdicat BETWEEN permet de vrier si lexpression situe gauche se
trouve dans lintervalle dni.
Exemple :
SELECT *
FROM LECTEUR
WHERE AGE BETWEEN 10 AND 14;
Le prdicat IN permet de vrier si un attribut se trouve dans la liste de valeurs
indiques.
Exemple :
SELECT *
FROM LECTEUR
WHERE AGE IN (10, 11, 12, 13, 14) ;
c M. Mathieu 40
Bases de donnes 2004-2005
Le prdicat LIKE permet de raliser des comparaisons entre un attribut et une
chane de caractres en utilisant des caractres de substitution :
pour zro ou plusieurs caractres (%)
pour un seul caractre ( )
Exemple :
SELECT *
FROM LECTEUR
WHERE PRENOM LIKE Mich% ;
permet davoir les enregistrements qui correspond aux lecteurs dont le prnom
commence par Mich.
c M. Mathieu 41
Bases de donnes 2004-2005
Les fonctions sur les chanes de caractres :
UPPER() - conversion en majuscules
LOWER() - conversion en minuscules
TRIM() - suppression des rptitions dun caractre gauche ou droite ou
aux deux extrmits
SUBTRING() - cration dune chane a partir dune autre.
Les fonction sur les dates :
DATE(exp) - conversion dune expression numrique ou chane de caractre
vers une date
DAY(date) - le jour du mois de la date
MONTH(date) - le mais de la date
YEAR(date) - lanne de la date
c M. Mathieu 42
Bases de donnes 2004-2005
Les fonctions agrgat (de regroupement) permettent dobtenir des donnes syn-
thtiques concernant une table ou des attributs de la table :
COUNT(* / attribut ) - le nombre denregistrements satisfaisant la requte
SUM(attribut ) - la somme des valeurs
MIN(attribut ) - le minimum
MAX(attribut ) - le maximum
AVG(attribut ) - la moyenne arithmtique
STDEV(attribut ) - lcart-type
VARIANCE(attribut ) - la variance lie lcart-type
La fonction COUNT peut contenir aussi les directives DISTINCT ou ALL.
Exemple :
SELECT COUNT(*), AVG(AGE) FROM LECTEUR;
fournit le nombre denregistrements dans la table LECTEUR et la moyenne dge.
c M. Mathieu 43
Bases de donnes 2004-2005
La clause GROUP BY permet de grouper le rsultat en fonction des valeurs des
attributs prsents dans la liste SELECT.
Exemple 1 :
SELECT COUNT(*), AGE
FROM LECTEUR
GROUP BY AGE;
fournit le nombre denregistrements dans la table LECTEUR pour chaque tranche
dage. La mme requte sans la clause GROUP BY est rronne, car imbigue.
Exemple 2 :
SELECT COUNT(*)
FROM LECTEUR
WHERE PRENOM = Anna ;
fournit le nombre denregistrements dans la table LECTEUR qui ont le prnom
Anna.
c M. Mathieu 44
Bases de donnes 2004-2005
La clause HAVING dcrit une restriction poses sur un groupe des tuples,
donc toute condition qui est pose sur un agrgat doit gurer dans la clause HA-
VING.
Exemple 3 :
SELECT COUNT(*), AGE
FROM LECTEUR GROUP BY AGE
HAVING COUNT(*) >= 2;
fournit les tranches dage avec au moins deux enregistrements dans la table
LECTEUR .
c M. Mathieu 45
Bases de donnes 2004-2005
Travail avec la valeur NULL
Des champs peuvent avoir la valeur NULL.
Exemple :
select anom, aprenom, commission
from agent;
Rsultat :
JACQ Aime
LEM Roger
DESCH Didier
BART Fabs
BLANCO Laurent 10.5
DESS Lim
....
c M. Mathieu 46
Bases de donnes 2004-2005
Les requtes dagrgat comme :
select min(commission)
from agent
ou
select count(commission)
from agent
oprent uniquement sur des valeurs non NULL.
La requte :
select anom, aprenom, nvl(to char(commission), sans)
from agent
afche :
ANOM APRENOM NVL(TO CHAR(COMMISSION),SANS)
---------- --------------- -----------
JACQ Aime sans
LEM Roger sans
DESCH Didier sans
BART Fabs sans
BLANCO Laurent 10.5
DESS Lim sans
c M. Mathieu 47
Bases de donnes 2004-2005
Le fonctionnement de la fonction COUNT et des autres fonctions agrgat
Exemples :
select count(*)
from agent;
fournit le nombre total denregistrements de la table AGENT.
select count(fonction)
from agent;
fournit le nombre dapparitions du champ FONCTION de la table AGENT.
select count(distinct fonction)
from agent;
fournit le nombre dapparitions des valeurs distinctes du champ FONCTION.
c M. Mathieu 48
Bases de donnes 2004-2005
La requete :
select fonction, count(*)
from agent;
est ambigue et non-rsolue.
La requete :
select fonction, count(*)
from agent
group by fonction;
fournit :
FONCTION COUNT(*)
------------ ----------
ANALYSTE 2
CAPITAINE 1
COMMERCIAL 4
DIRECTEUR 1
EMPLOYE 4
GARDIEN 1
PRESIDENT 1
qui est la liste de toutes les valeurs du champ FONCTION, avec leur nombre
dapparitions.
c M. Mathieu 49
Bases de donnes 2004-2005
Si la liste de slection dune requete SELECT contient des fonctions dagrgat
et des attributs des tables de slection, dans la clause GROUP BY il faut imp-
rativement indiquer tous les attributs ou fonctions scalaires sur ces attributs qui
apparaissent dans la clause SELECT.
c M. Mathieu 50
Bases de donnes 2004-2005
Requtes SELECT sur plusieurs tables
Dans la clause FROM on fait gurer plusieurs tables ou on utilise une condition
de sous-requte.
Exemple :
SELECT lecteur.*, pret.*
FROM lecteur, pret ;
fournit les enregistrements concatenns de deux tables.
En absence de toute condition entre les champs de deux tables la requte
ralise simplement le produit cartsien : il faut donc ajouter des conditions de
jointure.
c M. Mathieu 51
Bases de donnes 2004-2005
Conditions de jointure
Un jointure est un lien entre des attributs semblables des deux tables diff-
rente :
table1.attribut1 oprateur table2.attribut2
Loprateur de comparaison peut tre : =, <, >, <> ( !=), <=, >=.
Exemple :
SELECT LECTEUR.CODE LECTEUR, LECTEUR.NOM, LECTEUR.PRENOM
FROM LECTEUR, ENSEIGNANT
WHERE LECTEUR.NOM = ENSEIGNANT.NOM AND
LECTEUR.PRENOM = ENSEIGNANT.PRENOM;
permet dextraire des informations de la table LECTEUR qui ont un correspondant
dans la table ENSEIGNANT.
c M. Mathieu 52
Bases de donnes 2004-2005
Les jointures sapplent internes quand lexistence des deux attributs (table1.attribut1,
table2.attribut2) est obligatoire.
Un cas particulier de jointure interne est lquijointure : on teste lgalit entre
des attributs qui ont des domaines compatibles et la mme signication sman-
tique.
Exemple :
SELECT lecteur.*, pret.*
FROM lecteur, pret
WHERE lecteur.code lecteur = pret.code lecteur ;
on fournit uniquement les lecteurs qui ont des prts en cours, un lecteur apparat
autant de fois que le nombre denregistrements de la table pret.
c M. Mathieu 53
Bases de donnes 2004-2005
Exemple : les lecteurs qui ont en prt la livre LIle Mistrieuse :
SELECT nom, prenom
FROM lecteur l, pret p, document d
WHERE lecteur.code lecteur = pret.code lecteur
AND p.code document = d.code document
AND d.titre = LIle Mystrieuse ;
Lordre des conditions dquijointure nest pas importante, de mme dans une
quijointure on peut permuter les deux attributs.
Remarque : dautres conditions que = ou!= sont rarement utilises dans les
jointures.
c M. Mathieu 54
Bases de donnes 2004-2005
Une condition de jointure externe sexprime laide du (+) mis cot dun
attribut :
table1.attribut1 = table2.attribut2(+)
ou
table2.attribut2(+) = table1.attribut1
avec la signication : si des enregistrement de la table2 existent et vrient la
clause WHERE ils sont slectionns conformment une jointure classique; si
des enregistrement de la table2 nexistent pas les enregistrements de la table1
sont toutefois slectionns.
c M. Mathieu 55
Bases de donnes 2004-2005
Exemple : soient les tables EMPLOYE(NOM, CODE S) et SERVICE(CODE S,
NOM SERVICE) avec les enregistrements :
NOM CODE S
Anna 117
Nicolas 170
Andr 170
Paul
CODE S NOM SERVICE
170 RH
800 Direction
117 Comptabilit
c M. Mathieu 56
Bases de donnes 2004-2005
Pour afcher les employs et leur service :
SELECT nom, nom service
FROM employe, service
WHERE e.code s = s.code s ;
mais lemploy Paul ny gure pas.
La jointure ouverte (externe) :
SELECT nom, nom service
FROM employe, service
WHERE e.code s = s.code s(+) ;
fournit :
NOM NOM SERVICE
Andr RH
Anna Comptabilit
Nicolas RH
Paul
c M. Mathieu 57
Bases de donnes 2004-2005
Autre jointure ouverte :
SELECT nom, nom service
FROM employe, service
WHERE e.code s(+) = s.code s ;
fournit :
NOM NOM SERVICE
Andr RH
Anna Contabilit
Nicolas RH
Direction
Si on veut obtenir une jointure deux entres, il faut utiliser lopration UNION.
c M. Mathieu 58
Bases de donnes 2004-2005
Une condition de sous-requte :
[NOT] EXISTS (requte SELECT)
la condition est value vrai, si la requte SELECT retourne au moins une
ligne.
Exemple :
SELECT *
FROM PRET
WHERE EXISTS
(SELECT * FROM DOCUMENT) ;
afche le contenu de la table PRET uniquement si la table DOCUMENT nest
pas vide.
c M. Mathieu 59
Bases de donnes 2004-2005
Exemple 1 : vrier que des exemplaires du livre Les Fourmis sont en prt :
SELECT COUNT(*)
FROM document d
WHERE d.titre = Les formis
AND EXISTS
(SELECT *
FROM pret p
WHERE d.code document = p.code document) ;
c M. Mathieu 60
Bases de donnes 2004-2005
Exemple 2 : vrier que tous les exemplaires du livre Les Fourmis sont en
prt :
SELECT Oui
FROM document d
WHERE d.titre = Les formis
AND NOT EXISTS
(SELECT *
FROM pret p
WHERE d.code document = p.code document)
HAVING COUNT(*) = 0 ;
c M. Mathieu 61
Bases de donnes 2004-2005
Requtes imbriques
Les imbrications des requtes peuvent apparatre au niveau des conditions de
la clause WHERE et au niveau des tables de slection.
(Oracle admet jusqu 16 requtes imbriques.)
Les imbrications de la clause WHERE sont de type :
table.attribut = (requte SELECT)
ou
table.attribut IN (requte SELECT)
ou
table.attribut {<,>,<=,>=} {ANY|ALL}(requte SELECT)
Les deux premires formes sont smantiquement quivalentes, mais leur fa-
on dtre rsolues par le SGBD est diffrent.
c M. Mathieu 62
Bases de donnes 2004-2005
Les sous-requtes qui apparaissent dans la partie droite ne doivent pas conte-
nir des clauses ORDER BY.
Une requte imbrique peut scrire comme une requte non-imbrique.
Exemple : afcher tous les lecteurs ayant emprunt des livres depuis 24h :
SELECT DISTINCT l.nom, l.prenom
FROM lecteurs l
WHERE l.code lecteur IN (SELECT p.code lecteur
FROM pret p
WHERE p.date pret > SYSDATE -1) ;
Cette requte peut scrire comme :
SELECT DISTINCT l.nom, l.prenom
FROM lecteurs l, pret p
WHERE l.code lecteur = p.code lecteur
AND p.date pret > SYSDATE -1;
c M. Mathieu 63
Bases de donnes 2004-2005
Exemple : afcher les agents qui gangent au moins comme un plus grand
salaire dune fonction :
SELECT anom, aprenom
FROM agent
WHERE salaire >= ANY (SELECT MAX(salaire) FROM agent
GROUP BY fonction)
Exemple : afcher les agents qui gangent plus que le plus grand salaire de
chaque fonction :
SELECT anom, aprenom
FROM agent
WHERE salaire >= ALL (SELECT MAX(salaire) FROM agent
GROUP BY fonction)
c M. Mathieu 64
Bases de donnes 2004-2005
Le rsultat dune requte SELECT peut tre utilis comme une table de slec-
tion.
Exemple : afcher les agents qui gagnent le plus grand et le plus bas salaire :
select anom, aprenom
from agent A,
( select min(salaire) as sal from agent) B,
( select max(salaire) as sala from agent) C
where A.salaire = B.sal or A.salaire = C.sala;
Dans les requtes de cette forme lusage des synonymes devient impratif.
(Les synonymes sont utiliss pour les noms des tables de la clause FROM et
pour la liste de slection de la clause SELECT. Ces synonymes sont volatiles.)
c M. Mathieu 65
Bases de donnes 2004-2005
Une requte ensembliste est de forme :
requte1 UNION [ALL] | MINUS | INTERSECT requte2
o UNION, MINUS, INTERSECT ralise les oprations des ensembles connues.
La version UNION ALL ralise lunion des rsultats de chaque requte sans
liminer les doublons.
Les listes de slection des deux requtes se doivent tre compatibles par type.
c M. Mathieu 66
Bases de donnes 2004-2005
Exemple : afcher les agents qui gagnent le plus grand et le plus bas salaire :
select anom, aprenom
from agent
where salaire = (select min(salaire) from agent)
union
select anom, aprenom
from agent
where salaire = (select max(salaire) from agent) ;
c M. Mathieu 67
Bases de donnes 2004-2005
Langage SQL - Mise jour des donnes
Modications de donnes :
insertion INSERT
mise jour - UPDATE
suppression - DELETE (TRUNCATE)
1. Insertion
INSERT INTO nom table [(liste attributs)]
VALUES (liste valeurs)
Si les champs de la table sont explicits par (liste attributs), la liste des valeurs
doit avoir la mme longueur car la correspondance se fait de 1 1, sinon, la liste
des valeurs doit correspondre en longueur et en type la liste des attributs de la
table dans leur ordre de dnition.
Si des attributs ne sont pas spcis, ils prendront la valeur NULL ou leur
valeur par dfaut.
c M. Mathieu 68
Bases de donnes 2004-2005
Exemple : la table COLLECTIVITE a la structure suivante :
SQL>desc collectivite
Name Type
----------------------------------------------------------------------
IDCOLLECT NUMBER
CDESINATION VARCHAR2(20)
alors :
INSERT INTO COLLECTIVITE
VALUES (9, Picardie);
est quivalent :
INSERT INTO COLLECTIVITE (CDESINATION, IDCOLLECT)
VALUES (Picardie, 8);
c M. Mathieu 69
Bases de donnes 2004-2005
Une autre forme de lordre INSERT :
INSERT INTO nom table[(liste attributs)]
requte SELECT;
permet linsertion dans la table indique des enregistrements (mme plusieurs)
obtenus avec la requte SELECT.
Exemple :
INSERT INTO AGENT BIS
SELECT * FROM AGENT;
ralise une copie de la table AGENT dans la table AGENT BIS
qui a la mme structure.
c M. Mathieu 70
Bases de donnes 2004-2005
2. Modication
UPDATE nom table
SET nom attribut = valeur,.../
(liste attributs) = (liste valeurs)...
WHERE condition;
Cette instruction permet la modication des enregistrements vriant la condi-
tion ; cette modication porte sur les attributs prciss dans la clause SET qui se
voient attribus les valeurs indiques.
Ces valeurs sont soit des constantes, soit des expressions contenant des op-
rateurs et fonctions (except les fonctions agrgats) qui portent sur des constantes
et des attributs.
Le type dune valeur associe pour un attribut modi doit tre compatible
avec le type de lattribut.
c M. Mathieu 71
Bases de donnes 2004-2005
Exemple :
UPDATE COMMANDE
SET DATEC = sysdate,
DATEL = DATEL + 10
WHERE IDCOMM = 20;
est quivalent avec :
UPDATE COMMANDE
SET (DATEC , DATEL) = (sysdate, DATEL+ 10)
WHERE IDOMM = 20;
Cette requte modie lenregistrement de la table COMMANDE ayant la
valeur 20 pour lattribut cl IDCOMM.
c M. Mathieu 72
Bases de donnes 2004-2005
La forme suivante de UPDATE permet de faire la modication des attributs
avec des valeurs obtenues par une ou plusieurs requtes SELECT (appeles
sous-requtes) :
UPDATE nom table
SET (attribut ) = (sous-requte), ...
(liste attributs) = (sous-requte)
[WHERE condition] ;
Les sous requtes doivent imprativement retourner un seul enregistrement.
Si la sous-requte fait intervenir la table nom table et les attributs modier,
on dit que la requte est corrle. Dans une requte corrle on doit utiliser des
synonymes pour les tables.
c M. Mathieu 73
Bases de donnes 2004-2005
Exemple 1 - une requte non-corrle qui attribue un certain agent le salaire
maximum de la fonction COMMERCIAL :
UPDATE AGENT
SET SALAIRE = (SELECT MAX(SALAIRE) FROM AGENT WHERE FONCTION =
COMMERCIAL)
WHERE IDAGENT = 210;
Exemple 2 - une requte corrle, qui attribue un certain agent le salaire maxi-
mum de son service :
UPDATE AGENT A1
SET SALAIRE = (SELECT MAX(A2.SALAIRE)
FROM AGENT A2
WHERE A2.SERVICE ID = A1.SERVICE ID)
WHERE IDAGENT = 210;
c M. Mathieu 74
Bases de donnes 2004-2005
3. Suppression
DELETE FROM nom table
[WHERE condition] ;
Cette instruction permet denlever de la table nom table tous les enregistre-
ments qui vrient la condition.
En absence de la clause WHERE tous les enregistrements de la table seront
effacs.
Lordre :
TRUNCATE nom table;
permet la suppression rapide de tous les enregistrements de la table nom table.
c M. Mathieu 75
Bases de donnes 2004-2005
Exemple :
DELETE FROM COMMANDE
WHERE DATEL < SYSDATE - 365;
efface les enregistrements de la table COMMANDE qui ont la date de livraison
pass de plus dun an.
Les instructions :
DELETE FROM COMMANDE;
et
TRUNCATE COMMANDE;
fournissent presque le mme rsultat : leffacement de tous les enregistrements
de la table COMMANDE, mais la deuxime forme est plus rapide et ne ncessite
pas de conrmation.
c M. Mathieu 76
Bases de donnes 2004-2005
SQL - langage de contrle des donnes
Leffet des mises jour :
les requte INSERT, UPDATE, DELETE modient dabord le buffer utilisa-
teur. Elles doivent tre rendues dnitives avec lordre SQL :
COMMIT
ou annules avec lordre
ROLLBACK
la requte TRUNCATE est effective (une fois quelle est saisie, elle est di-
rectement excute sur la base).
c M. Mathieu 77
Bases de donnes 2004-2005
Transactions
Transaction = une squence de commandes traite comme une opration atomique
an de garantir la cohrence et lintgrit des donnes de la base.
Les commandes sont des mises jour et / ou des simples consultations.
Exemple 1 : lenregistrement dune commande VPC de plusieurs produits, qui
comporte :
linsertion de lentte de la commande
linsertions des produits commands
Ces insertions doivent tre excutes de faon indissociable et dnitive.
Exemple 2 : la rservation de places dans un avion (problme de concurrence
daccs) - solution : gestion transactionnelle des oprations sur la base.
Exemple 3 : un transfert bancaire entre 2 comptes.
c M. Mathieu 78
Bases de donnes 2004-2005
Les proprits dune transactions :
atomicit : les oprations dune transaction sont excutes comme une
unique opration
consistance : la base reste dans un tat cohrent la n de la transaction
isolation : la transaction sexcute indpendamment dautres oprations sur
la base
durabilit : les mises jour dune transaction sont dnitives
(ACID)
Une transaction comporte :
un dbut : cration
une n : validation ou annulation
c M. Mathieu 79
Bases de donnes 2004-2005
Cration dune transaction :
implicite : partir de la premire instruction qui suit la connexion la base
ou aprs un ordre COMMIT ou ROLLBACK
explicite : par lexcution de lordre :
SET TRANSACTION {READ ONLY | READ WRITE}
Validation :
implicite : la n de la connexion
explicite : par lordre COMMIT
Annulation :
explicite : par lordre ROLLBACK ou :
ROLLBACK TO SAVEPOINT point de retour
ou le point de retour est cre avec lordre :
SET SAVEPOINT point de retour
lintrieur de la transaction.
c M. Mathieu 80
Bases de donnes 2004-2005
Exemple 1 :
SQL>SELECT* FROM AGENT;
SQL>INSERT INTO AGENT...
SQL>UPDATE AGENT SET ...
SQL>SELECT * FROM AGENT;
SQL>COMMIT;
Les ordres INSERT et UPDATE font partie dune mme transaction, ils seront
excuts lun aprs lautre, mais leur excution est faite dans un intervalle
de temps indivisible. Lors du deuxime ordre SELECT les modications sont
visibles, bien quelles ne soient pas encore effectues dans la base.
Exemple 2 :
SQL>SET TRANSACTION READ ONLY
SQL>SELECT * FROM AGENT;
SQL>SELECT * FROM SERVICE;
SQL>COMMIT;
On obtient le contenus de deux tables au mme moment, savoir la dclaration
de la transaction.
c M. Mathieu 81
Bases de donnes 2004-2005
Une transaction READ ONLY contient uniquement des ordres SELECT et
LOCK TABLE nom table
Les requte SELECT sont excutes avec le contenu de la base tel quil tait au
moment de la dclaration SET TRANSACTION.
SQL*Plus dispose aussi la commande :
SET AUTOCOMMIT [ON | OFF]
Si on a loption ON sur le paramtre AUTOCOMMIT, aprs chaque requte cor-
recte syntaxiquement lordre COMMIT est fait automatiquement.
c M. Mathieu 82
Bases de donnes 2004-2005
SQL - Langage de dnition des donnes
Trois ordres pour dnir des objets dans la base :
CREATE objet nom liste paramtres
ALTER objet nom option| paramtre
DROP objet [option]
ou objet peut tre : table, vue, indexe, synonyme, squence, prol utilisateur, pro-
cdure stocke ou dclenche, tablespace, base, etc.
Ces ordres se auto-valident, savoir si ils sont corrects syntaxiquement et
fonctionellement, ils sont immdiatement excuts dans la base de faon dni-
tive et irrversible.
c M. Mathieu 83
Bases de donnes 2004-2005
Manipulation des tables
Une table se compose de colonnes, qui ont chacune un type, et doit respec-
ter des contraintes dintgrit. Les contraintes dintgrit sont des conditions qui
sexprime sur une ou plusieurs colonnes de la table avec, parfois, des colonnes
dune deuxime table.
La dnition dune table se fait avec lordre :
CREATE TABLE nom table
[(nom colonne type [DEFAULT valeur ] [contrainte colonne],...
[contrainte table, ...])]
[options de stockage, cluster, paralllisme, etc]
[AS requte SELECT]
Les options de stockage et autres dpendent du SGBD (travail de ladminis-
trateur de BD).
c M. Mathieu 84
Bases de donnes 2004-2005
Exemple 1 :
CREATE TABLE COLLECTIVITE
(IDCOLL NUMBER(2) DEFAULT 0,
NOM COLLECTIVITE VARCHAR2(30));
Les contraintes dintgrits sur une colonne contrainte colonne ou sur une
table contrainte table sont de forme :
[CONSTRAINT nom contrainte] description contrainte
Si le nom dune contrainte nest pas indique, il est gnr automatiquement.
Le nom sert pouvoir supprimer la contrainte ou pouvoir lactiver / dsactiver.
La description contrainte est de forme :
[NOT] NULL, CHECK, UNIQUE, PRIMARY KEY, FOREIGN KEY
c M. Mathieu 85
Bases de donnes 2004-2005
[NOT] NULL indique si la colonne est autorise ou pas avoir la valeur NULL
(par dfaut NULL autoris).
UNIQUE [(colonne, ..)] indique que la colonne ou la liste des colonnes en-
gendrent lunicit de lenregistrement (forment une cl potentielle).
CHECK (condition) indique que la condition qui porte sur une ou plusieurs
colonnes de la table doit tre toujours satisfaite.
PRIMARY KEY[(colonne,...)] indique que la ou les colonnes auxquelles la
contrainte est associe forment la cl primaire de la table (ORACLE admet donc
des cls multiples ayant jusquau 16 colonnes).
c M. Mathieu 86
Bases de donnes 2004-2005
FOREIGN KEY [(colonne, ...)] REFERENCES table2 (colonne, ...) [ON DE-
LETE CASCADE]
Une telle contrainte est une contrainte dintgrit rfrentielle. La ou les colonnes
de cette cl trangre doivent correspondre en nombre et en type avec les co-
lonnes indiques de la table2. De plus, les colonnes de cette table2 (qui peut tre
diffrente de la table de dnition ou la mme) doivent imprativement tre soit
une cl primaire, soit associes une contrainte UNIQUE.
Leffet de cette contrainte est que les valeurs des colonnes de la table1 doivent
toujours se retrouver dans la table2.
La clause ON DELETE CASCADE indique que si un enregistrement de la table2
est supprim, les enregistrements de la table1 avec la cl trangre correspon-
dante doivent aussi tre supprims.
Aucune contrainte dintgrit nest obligatoire pour une table.
c M. Mathieu 87
Bases de donnes 2004-2005
Exemple 2 :
CREATE TABLE COLLECTIVITE
(IDCOLL NUMBER(2) DEFAULT 0 CONSTRAINT NN COLL IDCOLL NOT NULL
CONSTRAINT PK COLLECTIVITE PRIMARY KEY,
NOM COLLECTIVITE VARCHAR2(30) NOT NULL);
quivalent :
CREATE TABLE COLLECTIVITE
(IDCOLL NUMER(2) DEFAULT 0 CONSTRAINT NN COLL IDCOLL NOT NULL ,
NOM COLLECTIVITE VARCHAR2(30) NOT NULL,
CONSTRAINT PK COLLECTIVITE PRIMARY KEY(IDCOLL));
Exemple 3 :
CREATE TABLE EMPLOYE
(IDEMP NUMBER(5) DEFAULT 0 NOT NULL CONSTRAINT PK EMPLOYE PRIMARY KEY,
NOM VARCHAR25(50) NOT NULL,
PRENOM VARCHAR2(50)NOT NULL,
IDCHEF NNUMBER(5) NULL,
NO SS VARCHAR2(15) CONSTRAINT CC EMP1 CHECK(NO SS LIKE 1% OR NO SS
LIKE 2%),
IDCOLL NUMBER(2) CONSTRAINT FK EMP1 FOREIGN KEY REFERENCES
COLLECTIVITE(IDCOLL));
c M. Mathieu 88
Bases de donnes 2004-2005
Exemple 4 :
CREATE TABLE EMPLOYE
(IDEMP NUMBER(5) DEFAULT 0 NOT NULL CONSTRAINT PK EMPLOYE PRIMARY KEY,
NOM VARCHAR25(50) NOT NULL,
PRENOM VARCHAR2(50)NOT NULL,
IDCHEF NNUMBER(5) NULL ,
NO SS VARCHAR2(15) CONSTRAINT CC EMP1 CHECK(NO SS LIKE 1% OR NO SS
LIKE 2%),
IDCOLL NUMBER(2) CONSTRAINT FK EMP1 FOREIGN KEY REFERENCES
COLLECTIVITE(IDCOLL),
CONSTRAINT FK EMP2 FOREIGN KEY (IDCHEF) REFERENCES EMPLOYE(IDEMP));
Dans cette table il y a deux cls trangres. La contrainte FK EMP1 exige que
la table COLLECTIVITE soit cre avant et que les insertions dans la table EMPLOYE
soient faites aprs celles de la table COLLECTIVITE. La contrainte FK EMP2 est trs
difcile satisfaire lors des insertions, car les insertions doivent tre faites dans
un ordre stricte avant dassurer linsertion dun chef avant ses employs. Que
faire pour saffranchir ?
c M. Mathieu 89
Bases de donnes 2004-2005
La clause AS requte SELECT permet dinsrer directement dans la table
les enregistrements obtenus avec la requte. Lusage de cette clause change le
format de description de la table :
la description peut manquer et, dans ce cas, les noms des colonnes de la
table seront donns par les noms des colonnes prsentes dans la requte;
les mmes contraintes dintgrit sont galement ajoutes.
si la description est prsente, on nindique pas le type des colonnes qui
est donn par le type des colonnes de SELECT; le nombre de colonnes
retournes par ce SELECT doit correspondre au nombre des colonnes de
la table.
Exemple 5 :
CREATE TABLE EMP ARCHIVE
AS SELECT * FROM EMPLOYE;
Attention! toute mise jour postrieure cette dclaration pour la table EMPLOYE
nest pas rpercute sur la table EMP ARCHIVE.
c M. Mathieu 90
Bases de donnes 2004-2005
La modication dune table est ralise par un ordre :
ALTER TABLE nom table option ;
Les options sont :
des changements de lespace de stockage, des partitions, du paralllisme, etc
non explicites dans ce cours
RENAME TO nom nouvelle table
qui permet de changer le nom de la table
{ADD | MODIFY} [(colonne type [DEFAULT valeur] contrainte colonne , ...)]
[contrainte table]
DROP COLUMN nom colonne
qui permet dajouter des nouvelles colonnes la table et des nouvelles contraintes
sur la tables ou de modier le type, la valeur par dfaut et les contraintes NULL
dune colonne.
c M. Mathieu 91
Bases de donnes 2004-2005
Les modications de type autorises sont celles qui augmentent ou diminuent
( condition que ce soit possible) la taille du type ou les transformations VAR-
CHAR2 CHAR.
Exemple 6 :
ALTER TABLE EMP ARCHIVE RENAME ARCHIVE EMPLOYE;
change le nom de la table cre en exemple 5
Exemple 7 :
ALTER TABLE EMPLOYE ADD
(DATEE DATE DEFAULT SYSDATE NOT NULL);
ALTER TABLE EMPLOYE MODIFY
(NOM VARCHAR25(50) NOT NULL,
PRENOM VARCHAR2(50)NOT NULL)
ajoute une colonne la table EMPLOYE et modie deux autres colonnes.
Exemple 8 : une solution la question pose en exemple 4 est de faire dabord
les insertions et ensuite ajouter la contrainte dintgrit rfrentielle :
ALTER TABLE EMPLOYE ADD
CONSTRAINT FK EMP2 REFERENCES EMPLOYE(IDEMP);
c M. Mathieu 92
Bases de donnes 2004-2005
Les options :
{DROP | DISABLE | ENABLE} {CONSTRAINT nom contrainte | PRIMARY
KEY | UNIQUE (liste colonnes)} CASCADE;
permet de supprimer, dsactiver ou activer une contrainte dintgrit sur une
table. Loption CASCADE est obligatoire si la contrainte est PRIMARY KEY
ou UNIQUE et si elle est rfrence par des contraintes FOREIGN KEY.
Exemple 9 : une autre solution la question pose en exemple 4 est de dsactiver
la contrainte dintgrit rfrentielle, de faire les insertions et ensuite de lactiver.
ALTER TABLE EMPLOYE DISABLE
CONSTRAINT FK EMP2;
INSERT INTO EMPLOYE ...;
INSERT INTO EMPLOYE ...;
ALTER TABLE EMPLOYE DISABLE
CONSTRAINT FK EMP2;
c M. Mathieu 93
Bases de donnes 2004-2005
Exemple 10 : modier la cl primaire dune table signie sa suppression suivie de
sa seconde cration et des ventuelles r-crations des contraintes dintgrits
rfrentielles :
ALTER TABLE EMPLOYE DROP PK EMPLOYE CASCADE;
ALTER TABLE EMPLOYE ADD CONSTRAINT PK EMPLOYE PRIMARY KEY (NOM,PRENOM);
ALTER TABLE EMPLOYE ADD CONSTRAINT CU EMPLOYE UNIQUE (IDEMP);
ALTER TABLE EMPLOYE ADD CONSTRAINT FK EMP2 FOREIGN KEY (RESPONSABLE)
REFERENCES EMPLOYE(IDEMP);
c M. Mathieu 94
Bases de donnes 2004-2005
La suppression dune table est ralise avec lordre :
DROP TABLE nom table CASCADE CONSTRAINTS;
avec loption CASCADE CONSTRAINTS on supprime toutes les contraintes rf-
rentielles qui font appel cette table.
Lors de lexcution de cet ordre le SGBD :
supprime tous les enregistrements de la table
supprime tous les indexes associs
invalide les objets (synonyme, vue ou autre) qui font rfrence cette table.
Exemple 11 :
DROP TABLE EMPLOYE CASCADE CONSTRAINTS;
c M. Mathieu 95
Bases de donnes 2004-2005
Les squences
Une squence est un compteur qui sincrmente et qui fournit sa valeur cou-
rante an dtre utilise comme valeur de colonne.
Cration :
CREATE SEQUENCE nom squence [INCREMENT BY valeur1] [START WITH
valeur2] [MAXVALUE valeur3 | NOMAXVALUE] [MINVALUE valeur4 | NOMIN-
VALUE] [CYCLE | NOCYCLE] ;
Modication :
ALTER SEQUENCE nom squence paramtres
o les paramtres sont les mmes que pour la cration, lexception de START
WITH.
Suppression :
DROP SEQUENCE nom squence;
c M. Mathieu 96
Bases de donnes 2004-2005
Lusage dune squence :
squence.CURVAL : donne la valeur courante
squence.NEXTVAL : incrmente la squence et retourne le rsultat.
Une squence peut tre utilise par plusieurs tables.
Exemple :
CREATE SEQUENCE NO EMP START WITH 200 INCREMENTED BY 5;
INSERT INTO EMPLOYE VALUES (NO EMP.NEXTVAL, DUPONT, D., ..);
ALTER SEQUENCE NO EMP INCREMENTED BY 10);
INSERT INTO EMPLOYE VALUES (NO EMP.NEXTVAL, DUPOND, D., ..);
SELECT NO EMP.CURVAL
FROM DUAL;
c M. Mathieu 97
Bases de donnes 2004-2005
Les vues
Une vue est une table logique base sur une ou plusieurs tables ou vues et
qui na pas dexistence physique.
elle est une requte SELECT
elle ne stocke donc pas des donnes
les mises jour partir des tables est automatique
Une vue est cre pour :
la condentialit
masquer la complexit des donnes de la base en consultation / modica-
tion
c M. Mathieu 98
Bases de donnes 2004-2005
Cration :
CREATE [OR REPLACE] VIEW nom vue [(liste colonnes)] AS requte SELECT
[WITH READ ONLY] [WITH CHECK CONTRAINT condition] ;
La vue est cre partir de la requte SELECT indique qui ne doit pas conte-
nir la clause ORDER BY. Les noms des colonnes de la vue sont soit explicits
avec liste colonnes, soit donns par la requte SELECT.
Suppression :
DROP VIEW nom vue;
c M. Mathieu 99
Bases de donnes 2004-2005
Exemple :
CREATE VIEW AFFECTATION (SALARIE, GROUPE)
AS
SELECT IDEMP, IDCOLL FROM EMPLOYE;
CREATE VIEW CHEFS AS
SELECT DISTINCT NOM AS NOM CHEF, PRENOM AS PRENOM CHEF
FROM EMPLOYE E1
WHERE EXISTS (SELECT * FROM EMPLOYE E2
WHERE E2.ID CHEF = E1.IDEMP);
c M. Mathieu 100
Bases de donnes 2004-2005
Les index
Les index sont des objets Oracle attachs une table, crs implicitement ou
explicitement dans le but dacclrer laccs cette table.
Un index se traduit par une structure de donnes de type table de hachage ou B-arbre.
Index crs :
implicitement - les cls primaires et les attributs formant une contrainte din-
tgrit UNIQUE
explicitement avec lordre :
CREATE INDEX nom index ON nom table (liste colonnes) [options de sto-
ckage] ;
c M. Mathieu 101
Bases de donnes 2004-2005
Suppression dun index :
suppression de la contrainte PRIMARY KEY ou UNIQUE
explicitement avec :
DROP INDEX nom index
An dobtenir vraiment une acclration du temps daccs il est souhaitable que
la table ait un taille importante et que les colonnes sur lesquelles on met lindex
se trouvent dans la partie WHERE des requtes accdant cette table.
Il est conseill aussi de mettre dans la partie WHERE dune requte des condi-
tions qui portent sur la totalit des colonnes dun index.
c M. Mathieu 102
Bases de donnes 2004-2005
Exemple : Mme pour une table avec 14 enregistrements leffet dun index est
visible :
select *
from agent
where datee>01-DEC-91;
Elapsed : 00 :00 :00.06
CREATE INDEX AGENT IDX1
ON AGENT(DATEE);
Index created.
Elapsed : 00 :00 :00.89
select *
from agent
where datee > 01-DEC-91;
Elapsed : 00 :00 :00.01
c M. Mathieu 103
Bases de donnes 2004-2005
Chapitre 4 :
Notions dadministration de bases
de donnes
Application Oracle
1. Synonymes et catalogues de donnes
2. Gestion des utilisateurs
3. Gestion des connexions la base
4. Gestion de la mmoire
5. Cration et entretien dune base
c M. Mathieu 104
Bases de donnes 2004-2005
Les synonymes
Un objet est dsign compltement comme :
[instance base.][proprietaire.]objet [@lien connexion]
lobjet tant table, vue, squence, synonyme, procdure stock, etc.
An dviter cette criture pour dsigner lobjet on utilise un synonyme dnit
avec :
CREATE [PUBLIC] SYNONYM nom synonyme FOR dsignation complte
Le synonyme pourra tre utilis dans des ordres SELECT, UPDATE, MODIFY,
DELETE, LOCK TABLE, GRANT, REVOKE.
c M. Mathieu 105
Bases de donnes 2004-2005
Exemple 1 :
CREATE SYNONYM market
FOR scott.market research;
CREATE PUBLIC SYNONYM emp
FOR scott.emp@sales;
Le premier synonyme fait rfrence une table dun autre utilisateur de la mme
base et le deuxime une table dune base distante.
Exemple 2 :
CREATE PUBLIC SYNONYM FOURNISSEUR FOR system.FOURNISSEUR;
CREATE PUBLIC SYNONYM SERVICE FOR system.SERVICE;
CREATE PUBLIC SYNONYM COMMANDE FOR system.COMMANDE;
CREATE PUBLIC SYNONYM AGENT FOR system.AGENT;
CREATE PUBLIC SYNONYM FOURNITURE FOR system.FOURNITURE;
CREATE PUBLIC SYNONYM COLLECTIVITE FOR system.COLLECTIVITE;
c M. Mathieu 106
Bases de donnes 2004-2005
Les catalogues des donnes
Oracle organise des mta-informations sur les objets contenus dans la base,
ces mta-informations se prsentent sous forme des tables en mode lecture uni-
quement.
Les dictionnaires de donnes contiennent des informations sur :
les dnitions de tous les objets de la base (tables, vues, squences, pro-
cdures, etc.)
lespace mmoire allou et utilis par chaque objet
les valeurs pas dfaut des colonnes
les contraintes dintgrit
les utilisateurs et leurs rles et privilges
dautres informations
Toutes ces informations sont la proprit de lutilisateur SYSTEM et sont gardes
dans un espace mmoire part.
Elles sont mises jour ds quun ordre LDD est xecut.
c M. Mathieu 107
Bases de donnes 2004-2005
Ces informations sont visibles avec les vues : USER *, ALL *, DBA *.
La liste de ces vues se trouve dans la table DICTIONARY ayant deux co-
lonnes : TABLE NAME et COMMENTS.
Les vues suivantes sont accessibles par nimporte quel utilisateur :
ALL CATALOG
ALL COL COMMENTS
ALL CONS COLUMNS
ALL CONSTRAINTS
ALL IND COLUMNS
ALL INDEXES
ALL OBJECTS
ALL TAB COLUMNS
ALL TAB COMMENTS
ALL TABLES
ALL USERS
ALL VIEWS
Les informations sur vos propres tables cres se trouveront dans ALL TABLES
et USER TABLES, ALL CONSTRAINTS, ALL INDEXES.
c M. Mathieu 108
Bases de donnes 2004-2005
La gestion des utilisateurs
Laccs une BD Oracle se fait en sidentiant avec un nom utilisateur et un mot
de passe crs par ladministrateur (DBA).
Un utilisateur peut avoir des droits (privilges) :
pour crer des objets qui deviennent les siens
pour utiliser des objets dj crs
La cration dun utilisateur (par le DBA) :
CREATE USERnom utilisateur IDENTIFIEDBY mot passe [options de stockage] ;
Le changement de mot de passe (par lutilisateur ou par le DBA) :
ALTER USER nom utilisateur IDENTIFIED BY nouveau mot de passe ;
c M. Mathieu 109
Bases de donnes 2004-2005
La suppression dun utilisateur :
DROP USER nom utilisateur [CASCADE] ;
Laffectation et la suppression dun privilge (par le DBA ou le propritaire de
lobjet) :
GRANT privilge TO nom utilisateur ;
REVOKE privilge TO nom utilisateur ;
Les privilges :
le droit de se connecter la base (CONNECT),
de crer des objets (CREATE ...),
des consulter en lecture uniquement (SELECT ON objet)
ou en modication des objets existants (MODIFY ON objet)
(les objets doivent tre dsigns de manire non-ambigu)
c M. Mathieu 110
Bases de donnes 2004-2005
Exemple :
DROP USER LAURENT CASCADE;
DROP USER OLIVIER CASCADE;
/* Creation des utilisateurs profs */
create user LAURENT identified by test default tablespace donneeopt
temporary tablespace temp quota 3M on donneeopt;
create user OLIVIER identified by test default tablespace donneeopt
temporary tablespace temp quota 3M on donneeopt;
grant connect to OLIVIER, LAURENT;
grant create session, create table, create synonym, create view, create
sequence, create procedure to OLIVIER, LAURENT;
grant create trigger to OLIVIER, LAURENT;
GRANT SELECT ON system.FOURNITURE TO OLIVIER, LAURENT;
GRANT SELECT ON system.SERVICE TO OLIVIER, LAURENT;
GRANT SELECT ON system.COMMANDE TO OLIVIER, LAURENT;
GRANT SELECT ON system.AGENT TO OLIVIER, LAURENT;
GRANT SELECT ON system.FOURNISSEUR TO OLIVIER, LAURENT;
GRANT SELECT ON system.COLLECTIVITE TO OLIVIER, LAURENT;
c M. Mathieu 111
Bases de donnes 2004-2005
La connexion une base (Oracle)
Laccs en mode client-serveur se fait selon ce schma :
Poste client
Net8
Serveur Oracle
base1 base2
Net8 - middleware qui sappuie sur un protocole rseau (TCP/IP). (remplace
SQL*Net).
c M. Mathieu 112
Bases de donnes 2004-2005
Sur le poste client il faut :
installer le logiciel Net8 dOracle
le congurer an de rendre la base accessible (via chier TNSNAMES.ORA)
installer soit des drivers JDBC pour programmer sous Java, soit un OBDC
an daccder la base depuis MS Acces, soit des logiciels Oracle ou de
dveloppement.
Sur le serveur il faut congurer le chier LISTNER.ORA.
Lemplacement des chiers LISTNER.ORA et TNSNAMES.ORA est :
$ORACLE HOME/network/admin/.
c M. Mathieu 113
Bases de donnes 2004-2005
Oracle permet laccs dun utilisateur dj connect sur une base daccder
une autre base Oracle (modulo le protocole rseau, la conguration, le logiciel
Net8).
Depuis la base courante on accde aux objets de la base distante en indi-
quant :
[instance base.][proprietaire.]objet @lien connexion
Le lien connexion comporte le nomsymbolique de la base distante et se dnit
avec :
CREATE [PUBLIC] [SHARED] DATABASE LINK lien connexion CONNECT TO
nom utilisateur IDENTIFIED BY mot de passe USING nom symbolique
Exemple :
CREATE SHARED PUBLIC DATABASE LINK sales.hq.acme.com
CONNECT TO scott IDENTIFIED BY tiger
AUTHENTICATED BY anupam IDENTIFIED BY bhide
USING sales;
c M. Mathieu 114
Bases de donnes 2004-2005
Oracle - fonctionnement du serveur
Sous Unix un utilisateur part pour Oracle.
Tout le travail du SGBD sappuie sur le listener :
> lsnrctl [start | stop | status]
Une fois le listner lanc les instances de base se lancent avec :
> set ORACLE SID=ORCL
>svrmgrl
connect internal/oracle
startup
exit
>
c M. Mathieu 115
Bases de donnes 2004-2005
Larrt du serveur doit tre prcd de larrt de toutes les instances de la
base :
> set ORACLE SID=ORCL
>svrmgrl
connect internal/oracle
shutdown [immediate]
exit
>
c M. Mathieu 116
Bases de donnes 2004-2005
Cration dune base
cration du chier dinitialisation
cration de la nouvelle instance de base
cration des dictionnaires, tablespaces, procdures stockes ...
cration des utilisateurs
c M. Mathieu 117
Bases de donnes 2004-2005
Importer / exporter des donnes
Cest possible sous Oracle avec les excutables imp et exp qui se trouvent dans :
$ORACLE HOME/bin
Pur faire ces oprations il ny a pas besoin de privilges particuliers, part les
droits sur les objets (tables) manipuls.
Ces opration sont utiles pour transfrer les donnes dune base une autre
et aussi pour lentretien dune base.
c M. Mathieu 118
Bases de donnes 2004-2005
Chapitre 5 :
Introduction au PL/SQL
c M. Mathieu 119
Bases de donnes 2004-2005
PL/SQL :
une marque Oracle
un vrai langage complmentaire SQL
un langage structur et procdural
permet la cration des fonctions / procdures stockes au niveau de la base
permet un accs plus n la base avec une gestion explicite des erreurs
La structure du code :
[DECLARE
-- declarations]
BEGIN
-- instructions
[EXCEPTION
--traitement exceptions]
END;
c M. Mathieu 120
Bases de donnes 2004-2005
Un programme PL/SQL peut tre :
un bloc anonyme saisis directement sous SQL*Plus
un bloc anonyme cr dans un chier.pl et excut depuis SQL*PLUS :
SQL>@chier.pl
une fonction/procdure stocke, un package ou un trigger appel depuis
des requtes SQL, dautre code PL/SQL ou dclenchs lors des certains
vnements :
CREATE FUNCTION/PROCEDURE/TRIGGER nom code ...
AS ...
Exemples :
c M. Mathieu 121
Bases de donnes 2004-2005
Exemples : un code PL/SQL qui ne fait rien :
SQL> begin
2 null;
3 end;
4 /
SQL>run
Procedure PL/SQL terminee avec succes.
ou qui fait la mme chose (pas grand chose) sous forme de procdure stocke :
SQL> create or replace procedure rien
2 is
3 begin
4 null;
5 end;
6 /
Procedure creee.
SQL> execute rien
Procedure PL/SQL terminee avec succes.
c M. Mathieu 122
Bases de donnes 2004-2005
SQL et PL/SQL
Des ordres SQL sont supports dans PL/SQL et des fonctions crites en
PL/SQL sont utilisables dans les ordres SQL.
Les instructions acceptes sous PL/SQL du langage de manipulation de don-
nes (LMD) et certaines instructions de gestion de transactions, savoir :
INSERT, UPDATE, DELETE, SELECT,
COMMIT, ROLLBACK, SAVEPOINT,
LOCK TABLE,
SET TRANSACTION READ ONLY.
Les ordres du LDD ne sont pas supports.
c M. Mathieu 123
Bases de donnes 2004-2005
Exemple :
DECLARE
qty on hand NUMBER(5);
BEGIN
SELECT quantity INTO qty on hand FROM inventory
WHERE product = TENNIS RACKET
FOR UPDATE OF quantity;
IF qty on hand > 0 THEN -- check quantity
UPDATE inventory SET quantity = quantity - 1
WHERE product = TENNIS RACKET;
INSERT INTO purchase record
VALUES (Tennis racket purchased, SYSDATE);
ELSE
INSERT INTO purchase record
VALUES (Out of tennis rackets, SYSDATE);
END IF;
COMMIT;
EXCEPTION
WHEN no data found THEN
INSERT INTO error table
VALUES (Product Tennis Rackets not found);
END;
/
c M. Mathieu 124
Bases de donnes 2004-2005
Dclaration de variables
Types de donnes :
BINARY INTEGER Entier
NUMBER [(n,m)]
CHAR [(longueur max)] Caractres long. xe < 32767 o
LONG et LONG RAW
VARCHAR2 (longueur max) Caractres long. Var < 32767 o
DATE
BOOLEAN True,False ou Null
V Prix NUMBER(4,2) := 11.5;
Affecter des valeurs :
V Prix := 15;
V PrixUnitaire := V Prix;
c M. Mathieu 125
Bases de donnes 2004-2005
Dclaration de constantes :
credit limit CONSTANT REAL := 5000.00;
La lecture dune variable (dans un bloc anonyme) est faite avec &variable
Dclaration de variables globales :
VARIABLE type nom variable ;
Une variable globale sutilise avec :nom variable.
VARIABLE NUMBER(10,2) PRIX;
...
BEGIN
:PRIX := CALCUL(...)
...
END
PRINT PRIX;
c M. Mathieu 126
Bases de donnes 2004-2005
Exemple : Retrouver le type dun fournisseur donn.
/* usage des variables internes */
set serveroutput on
DECLARE
VFNom Fournisseur.FNom%TYPE;
VFType Fournisseur.FType%TYPE;
Resultat CHAR(80);
BEGIN
SELECT FNom, FType
INTO VFNom, VFType
FROM Fournisseur
WHERE IdFourS = 107;
Resultat := Fournisseur : || 107 || Nom : ||
VFNom || Type : || VFType;
DBMS OUTPUT.PUT LINE(Resultat);
END;
/
c M. Mathieu 127
Bases de donnes 2004-2005
/* Avec des variables globales dont un prompteur */
ACCEPT PID PROMPT Numero fournisseur :
VARIABLE Resultat CHAR (80);
DECLARE
VFNom Fournisseur.FNom%TYPE;
VFType Fournisseur.FType%TYPE;
BEGIN
SELECT FNom, FType
INTO VFNom, VFType
FROM Fournisseur
WHERE IdFourS = &PID;
:Resultat := Fournisseur : || &PID || Nom : || VFNom ||
Type : || VFType;
END;
/
print Resultat;
c M. Mathieu 128
Bases de donnes 2004-2005
Lattribut %TYPE
permet de dnir des variables partir :
dune colonne de table
NomF Agent.ANom%TYPE;
dune autre variable
Prix NUMBER (4,2);
Prix Max v Prix%TYPE := 56;
Lattribut %ROWTYPE
permet de dclarer une variable partir dun ensemble de colonnes dune table
(ou vue)
Agent enregistrement Agent%ROWTYPE;
c M. Mathieu 129
Bases de donnes 2004-2005
Deux types de donnes composites
table PL/SQL :
record PL/SQL : similaire aux structures denregistrement
Exemple RECORD PL/SQL
DECLARE
TYPE Agt enreg IS RECORD
( AgtNom VARCHAR(25),
AgtPrenom VARCHAR(25) );
Enreg Agent Agt enreg;
c M. Mathieu 130
Bases de donnes 2004-2005
Les expressions font intervenir les oprateurs connus, des constantes et des
fonctions Oracle ou dnies par lutilisateur lexception de fontions dagrgat.
Les structures de contrle :
structures de test :
IF - THEN
IF - THEN - ELSE
IF - THEN - ELSIF
structures itratives :
LOOP et EXIT
WHILE - LOOP
FOR - LOOP
structure de contrle squentiel :
GOTO
NULL
c M. Mathieu 131
Bases de donnes 2004-2005
Exemples :
IF sales > quota THEN
compute bonus(empid);
UPDATE payroll SET pay = pay + bonus WHERE empno = emp id;
END IF;
IF trans type = CR THEN
UPDATE accounts SET balance = balance + credit WHERE ...
ELSE
IF new balance >= minimum balance THEN
UPDATE accounts SET balance = balance - debit WHERE ...
ELSE
RAISE insufficient funds;
END IF;
END IF;
c M. Mathieu 132
Bases de donnes 2004-2005
WHILE total <= 25000 LOOP
...
SELECT sal INTO salary FROM emp WHERE ...
total := total + salary;
END LOOP;
FOR ctr IN 1..10 LOOP
IF NOT finished THEN
INSERT INTO ... VALUES (ctr, ...); -- legal
factor := ctr * 2; -- legal
ELSE
ctr := 10; -- illegal
END IF;
END LOOP;
c M. Mathieu 133
Bases de donnes 2004-2005
DECLARE
done BOOLEAN;
BEGIN
...
FOR i IN 1..50 LOOP
IF done THEN
GOTO end loop;
END IF;
...
<<end loop>> --
NULL;
END LOOP; -- not an executable statement
END;
c M. Mathieu 134
Bases de donnes 2004-2005
Curseurs
curseurs implicits (SELECT)
curseurs variable
c M. Mathieu 135
Bases de donnes 2004-2005
Exemple :
CURSOR c1 IS SELECT empno, ename, job, sal FROM emp
WHERE sal > 2000;
CURSOR c2 RETURN dept%ROWTYPE IS
SELECT * FROM dept WHERE deptno = 10;
CURSOR c3 (start date DATE) IS
SELECT empno, sal FROM emp WHERE hiredate > start date;
c M. Mathieu 136
Bases de donnes 2004-2005
Exemple :
DECLARE
VFourT Id Commande.FourT Id%TYPE;
VPrix Commande.Prix %TYPE;
VIdCom Commande.IdCom%TYPE;
CURSOR LCurseur1 IS
SELECT IdCom, Prix
FROM Commande
WHERE FourT Id = &VFourT Id;
BEGIN
...
OPEN LCurseur1;
LOOP
...
FETCH LCurseur1 INTO VIdCom, VPrix;
EXIT WHEN LCurseur1%ROWCOUNT>5
OR %NOTFOUND;
...
END LOOP;
CLOSE LCurseur1;
END;
c M. Mathieu 137
Bases de donnes 2004-2005
Traitement derrreurs
Liste des erreurs prdnies :
ACCESS INTO NULL ORA-06530
CURSOR ALREADY OPEN ORA-06511
DUP VAL ON INDEX ORA-00001
INVALID CURSOR ORA-01001
INVALID NUMBER ORA-01722
LOGIN DENIED ORA-01017
NO DATA FOUND ORA-01403
NOT LOGGED ON ORA-01012
c M. Mathieu 138
Bases de donnes 2004-2005
PROGRAM ERROR ORA-06501
ROWTYPE MISMATCH ORA-06504
SELF IS NULL ORA-30625
STORAGE ERROR ORA-06500
SUBSCRIPT BEYOND COUNT ORA-06533
SUBSCRIPT OUTSIDE LIMIT ORA-06532
SYS INVALID ROWID ORA-01410
TIMEOUT ON RESOURCE ORA-00051
TOO MANY ROWS ORA-01422
VALUE ERROR ORA-06502
ZERO DIVIDE ORA-01476
c M. Mathieu 139
Bases de donnes 2004-2005
Exemple :
DECLARE
pe ratio NUMBER(3,1);
BEGIN
DELETE FROM stats WHERE symbol = XYZ;
SELECT price / NVL(earnings, 0) INTO pe ratio FROM stocks
WHERE symbol = XYZ;
INSERT INTO stats (symbol, ratio) VALUES (XYZ, pe ratio);
EXCEPTION
WHEN ZERO DIVIDE THEN
...
WHEN NOT FOUND THEN
...
END;
c M. Mathieu 140
Bases de donnes 2004-2005
DECLARE
pe ratio NUMBER(3,1);
BEGIN
DELETE FROM stats WHERE symbol = XYZ;
BEGIN ---------- sub-block begins
SELECT price / NVL(earnings, 0) INTO pe ratio FROM stocks
WHERE symbol = XYZ;
EXCEPTION
WHEN ZERO DIVIDE THEN
pe ratio := 0;
END; ---------- sub-block ends
INSERT INTO stats (symbol, ratio) VALUES (XYZ, pe ratio);
EXCEPTION
WHEN OTHERS THEN
...
END;
c M. Mathieu 141
Bases de donnes 2004-2005
DECLARE
v ename emp.ename%TYPE;
v job emp.job%TYPE;
BEGIN
SELECT ename, job
INTO v ename, v job
FROM emp
WHERE hiredate BETWEEN 1-JAN-92 AND 31-DEC-92;
...
EXCEPTION
WHEN no data found THEN
INSERT INTO error tab
VALUES (Nobody in 92);
WHEN too many rows THEN
INSERT INTO error tab
VALUES (More then one person in 92);
END;
c M. Mathieu 142
Bases de donnes 2004-2005
Si dautres erreurs ORACLE apparaissent, PL/SQL a deux variables qui permet
de rcuprer lerreur :
SQLCODE - le numro de lerreur
SQLERRM - le message complet
DECLARE
error-message CHAR (100);
error-code NUMBER;
BEGIN
...
EXCEPTION
WHEN OTHERS THEN
error message :=SUBSTR(SQLERM,1,100);
error code :=SQLCODE;
INSERT INTO errors VALUES (error message, error code);
END;
c M. Mathieu 143
Bases de donnes 2004-2005
Lutilisateur peut dnir ses propres erreurs (des erreurs de traitement).
Il faut prciser explicitement lexception (erreur) et lors de son apparition le code
est interrompu avec :
RAISE exception
Exemple :
DECLARE
out of stock EXCEPTION;
....
IF quantity on hand = 0 THEN
RAISE out of stock;
END IF
....
EXCEPTION
WHEN out of stock THEN ----traitement
c M. Mathieu 144
Bases de donnes 2004-2005
Excution dynamique des requtes SQL
Avec linstruction :
EXECUTE IMMEDIATE dynamic string
Exemple 1 :
EXECUTE IMMEDIATE DELETE FROM emp WHERE sal > :my sal AND comm
< :my comm
EXECUTE IMMEDIATE DELETE FROM emp WHERE sal > :s AND comm < :c
ou :my sal est substitu avec sa valeur courante
c M. Mathieu 145
Bases de donnes 2004-2005
Exemple 2 :
DECLARE
TYPE EmpCurTyp IS REF CURSOR;
emp cv EmpCurTyp;
my ename VARCHAR2(15);
my sal NUMBER := 1000;
BEGIN
OPEN emp cv FOR
SELECT ename, sal FROM emp
WHERE sal > :s USING my sal;
...
END;
c M. Mathieu 146
Bases de donnes 2004-2005
Exemple 3 :
CREATE PROCEDURE create dept (
deptno IN OUT NUMBER,
dname IN VARCHAR2,
loc IN VARCHAR2) AS
BEGIN
deptno := deptno seq.NEXTVAL;
INSERT INTO dept VALUES (deptno, dname, loc);
END;
Appel de cette procedure par du code PL/SQL dynamique :
DECLARE
plsql block VARCHAR2(500);
new deptno NUMBER(2);
new dname VARCHAR2(14) := ADVERTISING;
new loc VARCHAR2(13) := NEW YORK;
BEGIN
plsql block := BEGIN create dept( :a, :b, :c); END;;
EXECUTE IMMEDIATE plsql block
USING IN OUT new deptno, new dname, new loc;
IF new deptno > 90 THEN ...
END;--
c M. Mathieu 147
Bases de donnes 2004-2005
Procdures, fonctions et triggers
Sont des programmes qui contiennent du SQL et du PL/SQL qui sont gards
dans la base et excuts sur demande explicite (procdures et fonctions) ou lors
des vnements prcis (triggers).
cration : CREATE
modication du code : ALTER ou REPLACE
suppression : DROP
c M. Mathieu 148
Bases de donnes 2004-2005
Exemple 1 :
CREATE FUNCTION get bal(acc no IN NUMBER)
RETURN NUMBER
IS acc bal NUMBER(11,2);
BEGIN
SELECT balance
INTO acc bal
FROM accounts
WHERE account id = acc no;
RETURN(acc bal);
END;
Exemple 2 :
CREATE OR REPLACE PROCEDURE sam.credit (acc no IN NUMBER, amount IN
NUMBER) AS
BEGIN
UPDATE accounts
SET balance = balance + amount
WHERE account id = acc no;
END;
c M. Mathieu 149
Bases de donnes 2004-2005
Trigger = procdure stocke dclenche lors de linsertion, modication ou
suppression dun enregistrement dans une table ou vue bien prcise.
CREATE TRIGGER nom trigger [BEFORE | AFTER] venement ON table vue
[FOR EACH ROW] [WHEN (condition)]
code PL/SQL
Exemple :
CREATE TRIGGER scott.emp permit changes
BEFORE
DELETE OR INSERT OR UPDATE
ON scott.emp
pl/sql block
CREATE TRIGGER scott.salary check
BEFORE
INSERT OR UPDATE OF sal, job ON scott.emp
FOR EACH ROW
WHEN (new.job <> PRESIDENT)
pl/sql block
c M. Mathieu 150
Bases de donnes 2004-2005
Chapitre 6 :
JAVA et Oracle
c M. Mathieu 151
Bases de donnes 2004-2005
Trois faon dinterfacer JAVA (le langage) et Oracle (le SGBD) :
JDBC - API de Java
SQLJ - produit Oracle pour une Java VM qui supporte des requtes sta-
tiques
Fonctions stockes Java (PL/SQL)
CORBA et autres ...
c M. Mathieu 152
Bases de donnes 2004-2005
c M. Mathieu 153
Bases de donnes 2004-2005
JDBC (Java DataBase Conectivity)
Oracle a cr donc des drivers (thin, oci7, oci8, ...) et amlior considrable-
ment le standard de JAVA.
Du point de vue de la programmation, les tches senchanent de la manire
suivante :
Cration dune instance dun driver JDBC
Connexion la base de donnes
Cration dun contexte de requte
Soumission dune requte SQL au serveur SGBD
Collecte et traitement des rsultats
c M. Mathieu 154
Bases de donnes 2004-2005
Packages java
Nous utiliserons les classes dnies dans le package java.sql
DriverManager, Connection, Statement et ResultSet
Les rsultats (les valeurs des champs de la base) sobtiennent avec les m-
thodes get?? dnies par linterface ResultSet. Les mthodes existent sous deux
formes autorisant laccs aux donnes soit par le nom du champ, soit par son in-
dex dans le ResultSet :
les chanes de caractres :
String getString(int index); String getString(String name);
les entiers et les rels :
int getInt(int index); float getFloat(int index);
int getInt(String name); float getFloat(String name);
les dates :
Timestamp getDate(int index); Timestamp getDate(String name);
c M. Mathieu 155
Bases de donnes 2004-2005
Exemple :
import java.sql.*
import java.math.*
import java.io.*
import java.awt.*
class JdbcTest {
public static void main (String args []) throws SQLException {
// Load Oracle driver
DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
// Connect to the local database
Connection conn =
DriverManager.getConnection (
"jdbc :oracle :thin :@educusers :1521 :dbem",
"scott", "tiger");
c M. Mathieu 156
Bases de donnes 2004-2005
// Query the employee names
Statement stmt = conn.createStatement ();
ResultSet rset = stmt.executeQuery ("SELECT ENAME FROM EMP");
// Print the name out
while (rset.next ())
System.out.println (rset.getString (1));
// Close the result set, statement, and the connection
rset.close();
stmt.close();
conn.close();
}
}
c M. Mathieu 157
Bases de donnes 2004-2005
JDBC permet aussi des reqtes dynamiques :
import java.sql.*;
public static void projectsDue(boolean dueThisMonth) throws
SQLException {
// Get JDBC connection from previously initialized SQLJ
DefaultContext.
Connection conn = DefaultContext.getDefaultContext().getConnection();
String query = "SELECT name, start date + duration " +
"FROM projects WHERE start date + duration >=
sysdate";
if (dueThisMonth)
query += " AND to char(start date + duration, fmMonth) " +
" = to char(sysdate, fmMonth) ";
c M. Mathieu 158
Bases de donnes 2004-2005
PreparedStatement pstmt = conn.prepareStatement(query);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println("Project : " + rs.getString(1) + " Deadline :
" +
rs.getDate(2));
}
rs.close();
pstmt.close();
}
c M. Mathieu 159
Bases de donnes 2004-2005
Les traitements par lot (batch) sous JDBC :
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection(
"jdbc :oracle :thin :@educusers :1521 :dbem", "scott",
"tiger");
stmt = conn.createStatement();
try { stmt.execute(
"create table mytest table (col1 number, col2
varchar2(20))");
} catch (Exception e1) {}
//
// Insert in a batch.
//
pstmt = conn.prepareStatement("insert into mytest table values
(?,?)");
c M. Mathieu 160
Bases de donnes 2004-2005
pstmt.setInt(1, 1);
pstmt.setString(2, "row 1");
pstmt.addBatch();
pstmt.setInt(1, 2);
pstmt.setString(2, "row 2");
pstmt.addBatch();
pstmt.executeBatch();
//
// Select and print results.
//
rset = stmt.executeQuery("select * from mytest table");
while (rset.next())
{
System.out.println(rset.getInt(1) + ", " + rset.getString(2));
}
c M. Mathieu 161
Bases de donnes 2004-2005
SQLJ
Extension de Java qui fonctionne avec les mme drivers que JDBC, le code est
fait pour requtes statiques et excution est plus rapide.
>sqlj code.sqlj // produit code.java
>javac code.java
Exemple :
void runExample() throws SQLException
{
System.out.println();
System.out.println( "Running the example." );
System.out.println();
/* Reset the database for the demo application.
*/
#sql { DELETE FROM SALES };
c M. Mathieu 162
Bases de donnes 2004-2005
/* Insert a row into the cleared table.
*/
#sql
{
INSERT INTO SALES VALUES(
101,Relativistic redshift recorder,
TO DATE(22-OCT-1997,dd-mon-yyyy),
10999.95,
1,John Smith)
};
/* Insert another row in the table using bind variables.
*/
int itemID = 1001;
String itemName = "Left-handed hammer";
double totalCost = 79.99;
Integer salesRepID = new Integer(358);
String salesRepName = "Jouni Seppanen";
Date dateSold = new Date(97,11,6);
#sql { INSERT INTO SALES VALUES( :itemID, :itemName, :dateSold, :totalCost,
:salesRepID, :salesRepName) };
c M. Mathieu 163
Bases de donnes 2004-2005
/* Instantiate and initialize the iterator.
**
** The iterator object is initialized using the result of a query.
** The query creates a new instance of the iterator and stores it
in
** the variable sales of type SalesRecs. SQLJ translator has
** automatically declared the iterator so that it has methods for
** accessing the rows and columns of the result set.
*/
SalesRecs sales;
#sql sales = { SELECT item number,item name,sales date,cost,
sales rep number,sales rep name FROM sales };
/* Print the result using the iterator.
**
** Note how the next row is accessed using method next(), and how
** the columns can be accessed with methods that are named after
the
** actual database column names.
*/
c M. Mathieu 164
Bases de donnes 2004-2005
while( sales.next() )
{
System.out.println( "ITEM ID : " + sales.item number() );
System.out.println( "ITEM NAME : " + sales.item name() );
System.out.println( "COST : " + sales.cost() );
System.out.println( "SALES DATE : " + sales.sales date() );
System.out.println( "SALES REP ID : " + sales.sales rep number()
);
System.out.println( "SALES REP NAME : " + sales.sales rep name()
);
System.out.println();
}
/* Close the iterator.
**
** Iterators should be closed when you no longer need them.
*/
sales.close();
}
c M. Mathieu 165
Bases de donnes 2004-2005
Fonctions stockes Java
Les fonctions Java se compilent dabord an dobtenir des classes, ensuite ces
classes sont charges dans la base avec :
loadjava -user nom/mot de passe@lien connexion nom classe.class
Une dnition de type CREATE FUNCTION est ncessaire en indiquant quil
sagit du code Java. Lappel se fait indiquant le nom et les paramtres.
Exemple 1 : soit la fonction trs simple :
public class Test
{
public static String Message(){return "Bonjour!";}
}
Elle est compile et charge :
> javac Test.java
> loadjava -user mihaela/test@dbem.world java.class
c M. Mathieu 166
Bases de donnes 2004-2005
Sous SQL*Plus on dnit la fonction et on lappelle :
SQL> CREATE FUNCTION TESTJAVA RETURN VARCHAR2
2 AS LANGUAGE JAVA
3 NAME Test.Message() return java.lang.String;
4 /
Fonction cre.
SQL> CALL TESTJAVA() INTO :R;
Appel termin.
SQL> PRINT :R;
R
--------------------------------
Bonjour!
SQL> SELECT TESTJAVA() FROM DUAL;
TESTJAVA()
---------------------------------------------------------
Bonjour!
c M. Mathieu 167
Bases de donnes 2004-2005
Exemple 2 : Soit la code java suivant :
public class Fibonacci
{
public static int fib (int n)
{
if (n==1 || n==2) return 1;
else
return fib(n-1) + fib(n - 2);
}
}
qui est compil et charg dans la base avec loadjava. Au niveau de SQL*Plus :
SQL>
SQL> CREATE OR REPLACE FUNCTION fib (n NUMBER) RETURN NUMBER
2 AS LANGUAGE JAVA
3 NAME Fibonacci.fib(int) return int;
4 /
Fonction cre.
c M. Mathieu 168
Bases de donnes 2004-2005
Son appel est prpar et effectu :
SQL> VARIABLE n NUMBER
SQL> VARIABLE f NUMBER
SQL> EXECUTE :n := 7;
Procdure PL/SQL termine avec succs.
SQL> CALL fib( :n) INTO :f;
Appel termin.
SQL> PRINT :f;
F
----------
13
c M. Mathieu 169
Bases de donnes 2004-2005
Chapitre 7 :
Programmation C et Oracle
c M. Mathieu 170
Bases de donnes 2004-2005
Oracle offre la possibilit dcrire des programmes en langages de haut niveau
(FORTRAN, COBOL, C/C++) qui englobent des facilits pour le travail avec les
bases de donnes.
Pro*C/C++ est le prcompilateur pour C/C++. Il permet de :
crire des programmes en C et C++
excuter lintrieur du programme nimporte quel type dordre SQL stan-
dard :
cration dynamique des tables : CREATE, ALTER, DROP
manipulation des donnes : SELECT, INSERT, DELETE, UPDATE
transactions : COMMIT, ROLLBACK
c M. Mathieu 171
Bases de donnes 2004-2005
inclure des blocs PL/SQL
traiter les erreurs
convertir les types internes de donnes Oracle en types de donnes C
utiliser des accs concurents
prcompiler dynamiquement
crer et excuter dynamiquement des ordres SQL
travailler avec les objets de lutilisateur (fonction, procdures, triggers, vue,
etc)
travailler avec des objets de grande taille
c M. Mathieu 172
Bases de donnes 2004-2005
Le schma de construction de lexcutable :
c M. Mathieu 173
Bases de donnes 2004-2005
Le prcompilateur se trouve dans $ORACLE HOME/bin et transforme un pro-
gramme avec extension .pc en programme .c ou .cpp.
Tout source .pc doit contenir au moins :
# include <sqlca.h>
Cette librairie se trouve dans le rpertoire $ORACLE HOME/precomp/public/.
Attention! ! les options de prcompilation, compilation et dition des liens sont
nombreuses et parfois indispensables.
c M. Mathieu 174
Bases de donnes 2004-2005
c M. Mathieu 175
Bases de donnes 2004-2005
La connexion doit se faire avant tout acces la base.
La syntaxe est :
EXEC SQL CONNECT { :user IDENTIFIED BY :oldpswd | :usr psw }
[[ AT { dbname | :host variable }] USING :connect string ]
[ {ALTER AUTHORIZATION :newpswd | IN { SYSDBA | SYSOPER } MODE} ] ;
Une forme simple :
EXEC SQL CONNECT :username IDENTIFIED BY :password;
ou username and password sont des variables hte de type CHAR or VARCHAR.
On utilise aussi :
EXEC SQL CONNECT :usr pwd ;
ou usr pwd contient toute la chane de connexion, le mot de passe tant spar
avec un /.
c M. Mathieu 176
Bases de donnes 2004-2005
Exemple :
char *username = "SCOTT@DBEM.WORLD";
char *password = "TIGER";
...
EXEC SQL WHENEVER SQLERROR ...
EXEC SQL CONNECT :username IDENTIFIED BY :password;
Plusieurs connexion simultanes des bases de donnes sont possibles.
c M. Mathieu 177
Bases de donnes 2004-2005
Les ordres SQL embarqus sont sous forme :
EXEC SQL <ordre SQL standard>;
(une clause INTO peut apparatre pour SELECT ou FETCH).
Un bloc PL/SQL embarqu est dni avec :
EXEC SQL EXECUTE
<bloc PL/SQL>
c M. Mathieu 178
Bases de donnes 2004-2005
Les variables hte :
sont dclares en dbut de programme dans un bloc compris entre :
BEGIN DECLARE SECTION
....
END DECLARE SECTION
sont utilises pour manipuler les donnes
sont utilisables comme des variables C.
Exemple :
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR nom[50];
int sal, emp no;
EXEC SQL END DECLARE SECTION;
Usage :
emp no = 2000;
EXEC SQL SELECT anom, salaire
INTO :nom, :sal
FROM agent
WHERE id agent = :emp no;
c M. Mathieu 179
Bases de donnes 2004-2005
Usage illgal :
emp no = 2000;
strcpy(ma table, agent);
EXEC SQL SELECT anom, salaire
INTO :nom, :sal
FROM :ma table
WHERE id agent = :emp no;
Dans des ordres SQL le nom des objets doit tre explicite!
c M. Mathieu 180
Bases de donnes 2004-2005
Un curseur identie une ligne retourne dune table dans une requte. Les ins-
tructions :
DECLARE CURSOR
OPEN
FETCH
CLOSE
permettent de dclarer, ouvrir, utiliser et fermer un curseur.
Un curseur doit avoir un nom unique et tre dclar une seule fois.
c M. Mathieu 181
Bases de donnes 2004-2005
Exemple :
/* Declare the cursor. All static SQL explicit cursors
* contain SELECT commands. salespeople is a SQL identifier,
* not a (C) host variable.
*/
EXEC SQL DECLARE salespeople CURSOR FOR
SELECT ENAME, SAL, COMM
FROM EMP
WHERE JOB LIKE SALES%;
/* Open the cursor. */
EXEC SQL OPEN salespeople;
/* Get ready to print results. */
printf("\n\nThe companys salespeople are--\n\n");
printf("Salesperson Salary Commission\n");
printf("----------- ------ ----------\n");
c M. Mathieu 182
Bases de donnes 2004-2005
/* Loop, fetching all salespersons statistics.
* Cause the program to break the loop when no more
* data can be retrieved on the cursor.
*/
EXEC SQL WHENEVER NOT FOUND DO break;
for (;;)
{
EXEC SQL FETCH salespeople INTO :emp rec ptr;
printf("%s %9.2f %12.2f\n", emp rec ptr->emp name,
emp rec ptr->salary, emp rec ptr->commission);
}
/* Close the cursor. */
EXEC SQL CLOSE salespeople;
c M. Mathieu 183

S-ar putea să vă placă și