2004 - 2005
Mihaela Mathieu
mathieu@emse.fr
Bases de donnes
2004-2005
Objectifs :
comprendre et matriser les fonctions dun SGBD relationnel (Oracle et MySQL)
connatre le langage SQL
savoir dvelopper une application sous Oracle et MySQL
c M. Mathieu
Bases de donnes
2004-2005
Contenu du cours :
Introduction aux SGBD(R)
historique
dfinitions, 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
Bases de donnes
2004-2005
c M. Mathieu
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
Bases de donnes
2004-2005
c M. Mathieu
Bases de donnes
2004-2005
Pr-requis :
logique
cours Systmes dInformations
c M. Mathieu
Bases de donnes
2004-2005
Chapitre 1 :
Introduction aux SGBD(R)
1.
2.
3.
4.
Dfinitions
tat du march
Prsentation dOracle et de SQL*Plus
Prsentation de MySQL
c M. Mathieu
Bases de donnes
2004-2005
Base de donnes = collection structure de donnes cohrentes, intgres, protges et accessibles simultanment aux utilisateurs.
Systme de Gestion de Bases de Donnes = logiciel complexe capable dassurer
lexploitation correcte et efficace des BD.
BD au coeur des Systmes dInformation importance capitale de la qualit,
de la fiabilit 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
Bases de donnes
2004-2005
Schma externe
Schma conceptuel
Schma physique
Mmoire (externe)
c M. Mathieu
10
Bases de donnes
2004-2005
c M. Mathieu
11
Bases de donnes
2004-2005
c M. Mathieu
12
Bases de donnes
2004-2005
UTILISATEUR
Schma externe
Schma externe
Schma conceptuel
DEVELOPPEUR
Schma physique
EXPERT
DBA
Mmoire (externe)
c M. Mathieu
13
Bases de donnes
2004-2005
c M. Mathieu
14
Bases de donnes
2004-2005
relationnel
rseau, hirarchique (plus maintenant)
orient objet (pass de mode). Exemple : O2
XML
15
Bases de donnes
2004-2005
c M. Mathieu
16
Bases de donnes
2004-2005
(les moins : administration assez lourde pour des gros volumes de donnes, son prix)
c M. Mathieu
17
Bases de donnes
2004-2005
18
Bases de donnes
2004-2005
19
Bases de donnes
2004-2005
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 :
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 finissent par les caractre ; )
Exemple 3 :
SQL > @fichier.sql excute les ordres contenus dans fichier.sql
c M. Mathieu
22
Bases de donnes
2004-2005
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
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 :
c M. Mathieu
27
Bases de donnes
2004-2005
La valeur NULL :
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 signification :
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 modifications des objets donnes dune base)
2. Descriptions (crations, modifications, suppressions)
3. Contrle (gestion des transactions).
c M. Mathieu
31
Bases de donnes
2004-2005
32
Bases de donnes
2004-2005
car le rsulat dune requte SELECT est un ensemble de tuples, i.e. une table.
c M. Mathieu
33
Bases de donnes
2004-2005
34
Bases de donnes
2004-2005
fournit tous les champs PRENOM des enregistrements de cette table, mme les
doublons.
SELECT DISTINCT PRENOM FROM LECTEUR
c M. Mathieu
35
Bases de donnes
2004-2005
La clause FROM contient une liste dau moins une table avec ou sans synonyme 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 dafficher les rsultats selon des champs prsents dans sa liste de slection. Le tri peut tre croissant (option ASC - implicite)
ou dcroissant (option DESC).
et
SELECT NOM, PRENOM , AGE FROM LECTEUR ORDER BY 3
37
Bases de donnes
2004-2005
c M. Mathieu
38
Bases de donnes
2004-2005
Conditions de comparaison permettent de comparer un attribut ou une expression 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
40
Bases de donnes
2004-2005
permet davoir les enregistrements qui correspond aux lecteurs dont le prnom
commence par Mich.
c M. Mathieu
41
Bases de donnes
2004-2005
42
Bases de donnes
2004-2005
Les fonctions agrgat (de regroupement) permettent dobtenir des donnes synthtiques concernant une table ou des attributs de la table :
43
Bases de donnes
2004-2005
Exemple 2 :
SELECT COUNT(*)
FROM LECTEUR
WHERE PRENOM = Anna ;
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 figurer dans la clause HAVING.
Exemple 3 :
fournit les tranches dage avec au moins deux enregistrements dans la table
LECTEUR .
c M. Mathieu
45
Bases de donnes
2004-2005
Rsultat :
JACQ
LEM
DESCH
BART
BLANCO
DESS
Aime
Roger
Didier
Fabs
Laurent
Lim
10.5
....
c M. Mathieu
46
Bases de donnes
2004-2005
ou
select count(commission)
from agent
La requte :
affiche :
ANOM
---------JACQ
LEM
DESCH
BART
BLANCO
APRENOM
--------------Aime
Roger
Didier
Fabs
Laurent
NVL(TO CHAR(COMMISSION),SANS)
----------sans
sans
sans
sans
10.5
DESS
Lim
sans
c M. Mathieu
47
Bases de donnes
2004-2005
select count(*)
from agent ;
select count(fonction)
from agent ;
fournit le nombre dapparitions du champ FONCTION de la table AGENT.
48
Bases de donnes
2004-2005
La requete :
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
c M. Mathieu
50
Bases de donnes
2004-2005
Dans la clause FROM on fait figurer plusieurs tables ou on utilise une condition
de sous-requte.
Exemple :
SELECT lecteur.*, pret.*
FROM lecteur, pret ;
51
Bases de donnes
2004-2005
Conditions de jointure
Un jointure est un lien entre des attributs semblables des deux tables diffrente :
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 ;
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 signification smantique.
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
Lordre des conditions dquijointure nest pas importante, de mme dans une
quijointure on peut permuter les deux attributs.
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 signification : si des enregistrement de la table2 existent et vrifient 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
c M. Mathieu
CODE S
117
170
170
NOM SERVICE
RH
Direction
Comptabilit
56
Bases de donnes
2004-2005
NOM SERVICE
RH
Comptabilit
RH
57
Bases de donnes
2004-2005
NOM SERVICE
RH
Contabilit
RH
Direction
Si on veut obtenir une jointure deux entres, il faut utiliser lopration UNION.
c M. Mathieu
58
Bases de donnes
2004-2005
59
Bases de donnes
2004-2005
Exemple 1 : vrifier 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 : vrifier 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 faon 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 contenir des clauses ORDER BY.
Une requte imbrique peut scrire comme une requte non-imbrique.
Exemple : afficher 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) ;
63
Bases de donnes
2004-2005
Exemple : afficher 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 : afficher 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 slection.
Exemple : afficher 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
c M. Mathieu
66
Bases de donnes
2004-2005
Exemple : afficher 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
68
Bases de donnes
2004-2005
SQL>desc collectivite
Name
Type
---------------------------------------------------------------------IDCOLLECT
NUMBER
CDESINATION
VARCHAR2(20)
alors :
est quivalent :
INSERT INTO COLLECTIVITE (CDESINATION, IDCOLLECT)
VALUES (Picardie, 8) ;
c M. Mathieu
69
Bases de donnes
2004-2005
c M. Mathieu
70
Bases de donnes
2004-2005
2. Modification
UPDATE nom table
SET nom attribut = valeur,.../
(liste attributs) = (liste valeurs)...
WHERE condition ;
Cette instruction permet la modification des enregistrements vrifiant la condition ; cette modification 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 oprateurs et fonctions (except les fonctions agrgats) qui portent sur des constantes
et des attributs.
Le type dune valeur associe pour un attribut modifi 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 ;
UPDATE COMMANDE
SET (DATEC , DATEL) = (sysdate, DATEL+ 10)
WHERE IDOMM = 20 ;
c M. Mathieu
72
Bases de donnes
2004-2005
73
Bases de donnes
2004-2005
Exemple 2 - une requte corrle, qui attribue un certain agent le salaire maximum 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 enregistrements qui vrifient 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 :
et
TRUNCATE COMMANDE ;
c M. Mathieu
76
Bases de donnes
2004-2005
c M. Mathieu
77
Bases de donnes
2004-2005
Transactions
Transaction = une squence de commandes traite comme une opration atomique
afin de garantir la cohrence et lintgrit des donnes de la base.
Les commandes sont des mises jour et / ou des simples consultations.
78
Bases de donnes
2004-2005
79
Bases de donnes
2004-2005
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 modifications sont
visibles, bien quelles ne soient pas encore effectues dans la base.
Exemple 2 :
c M. Mathieu
81
Bases de donnes
2004-2005
82
Bases de donnes
2004-2005
83
Bases de donnes
2004-2005
84
Bases de donnes
2004-2005
Exemple 1 :
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 engendrent 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 DELETE 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 colonnes indiques de la table2. De plus, les colonnes de cette table2 (qui peut tre
diffrente de la table de dfinition 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 correspondante doivent aussi tre supprims.
Aucune contrainte dintgrit nest obligatoire pour une table.
c M. Mathieu
87
Bases de donnes
2004-2005
Exemple 2 :
quivalent :
Exemple 3 :
c M. Mathieu
88
Bases de donnes
2004-2005
Exemple 4 :
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
difficile 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
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
91
Bases de donnes
2004-2005
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.
93
Bases de donnes
2004-2005
REFERENCES EMPLOYE(IDEMP) ;
c M. Mathieu
94
Bases de donnes
2004-2005
95
Bases de donnes
2004-2005
Les squences
Une squence est un compteur qui sincrmente et qui fournit sa valeur courante afin dtre utilise comme valeur de colonne.
Cration :
CREATE SEQUENCE nom squence [INCREMENT BY valeur1] [START WITH
valeur2] [MAXVALUE valeur3 | NOMAXVALUE] [MINVALUE valeur4 | NOMINVALUE] [CYCLE | NOCYCLE] ;
Modification :
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
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 confidentialit
masquer la complexit des donnes de la base en consultation / modification
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 contenir 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 :
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 dintgrit UNIQUE
explicitement avec lordre :
CREATE INDEX nom index ON nom table (liste colonnes) [options de stockage] ;
c M. Mathieu
101
Bases de donnes
2004-2005
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.
2.
3.
4.
5.
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.
Afin dviter cette criture pour dsigner lobjet on utilise un synonyme dfinit
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 :
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
CREATE
CREATE
CREATE
CREATE
PUBLIC
PUBLIC
PUBLIC
PUBLIC
PUBLIC
SYNONYM
SYNONYM
SYNONYM
SYNONYM
SYNONYM
c M. Mathieu
106
Bases de donnes
2004-2005
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 colonnes : TABLE NAME et COMMENTS.
Les vues suivantes sont accessibles par nimporte quel utilisateur :
ALL
ALL
ALL
ALL
ALL
ALL
ALL
ALL
ALL
ALL
ALL
ALL
CATALOG
COL COMMENTS
CONS COLUMNS
CONSTRAINTS
IND COLUMNS
INDEXES
OBJECTS
TAB COLUMNS
TAB COMMENTS
TABLES
USERS
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
109
Bases de donnes
2004-2005
110
Bases de donnes
2004-2005
Exemple :
SELECT
SELECT
SELECT
SELECT
SELECT
ON
ON
ON
ON
ON
111
Bases de donnes
2004-2005
Serveur Oracle
Net8
base1
base2
Poste client
112
Bases de donnes
2004-2005
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 configuration, le logiciel
Net8).
Depuis la base courante on accde aux objets de la base distante en indiquant :
[instance base.][proprietaire.]objet@lien connexion
Le lien connexion comporte le nom symbolique de la base distante et se dfinit
avec :
CREATE [PUBLIC] [SHARED] DATABASE LINK lien connexion CONNECT TO
nom utilisateur IDENTIFIED BY mot de passe USING nom symbolique
Exemple :
114
Bases de donnes
2004-2005
115
Bases de donnes
2004-2005
c M. Mathieu
116
Bases de donnes
2004-2005
c M. Mathieu
117
Bases de donnes
2004-2005
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 :
La structure du code :
[DECLARE
-- declarations]
BEGIN
-- instructions
[EXCEPTION
--traitement exceptions]
END ;
c M. Mathieu
120
Bases de donnes
2004-2005
121
Bases de donnes
2004-2005
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 donnes (LMD) et certaines instructions de gestion de transactions, savoir :
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. fixe < 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 ;
:= 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
126
Bases de donnes
2004-2005
127
Bases de donnes
2004-2005
c M. Mathieu
128
Bases de donnes
2004-2005
Lattribut %TYPE
permet de dfinir des variables partir :
dune colonne de table
NomF
Agent.ANom%TYPE ;
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
c M. Mathieu
Agent%ROWTYPE ;
129
Bases de donnes
2004-2005
c M. Mathieu
Agt enreg ;
130
Bases de donnes
2004-2005
Les expressions font intervenir les oprateurs connus, des constantes et des
fonctions Oracle ou dfinies par lutilisateur lexception de fontions dagrgat.
131
Bases de donnes
2004-2005
Exemples :
c M. Mathieu
132
Bases de donnes
2004-2005
-- legal
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 :
c M. Mathieu
136
Bases de donnes
2004-2005
Exemple :
DECLARE
VFourT Id
VPrix
VIdCom
CURSOR
Commande.FourT Id%TYPE ;
Commande.Prix %TYPE ;
Commande.IdCom%TYPE ;
LCurseur1
SELECT
FROM
WHERE
IS
IdCom, Prix
Commande
FourT Id = &VFourT Id ;
BEGIN
...
OPEN
LOOP
LCurseur1 ;
...
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 prdfinies :
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
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
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
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
Avec linstruction :
EXECUTE IMMEDIATE dynamic string
Exemple 1 :
EXECUTE IMMEDIATE
< :my comm
EXECUTE IMMEDIATE
DELETE FROM emp WHERE sal > :my sal AND comm
DELETE FROM emp WHERE sal > :s AND comm < :c
145
Bases de donnes
2004-2005
Exemple 2 :
DECLARE
TYPE EmpCurTyp IS REF CURSOR ;
EmpCurTyp ;
emp cv
my ename VARCHAR2(15) ;
NUMBER := 1000 ;
my sal
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 :
DECLARE
plsql block VARCHAR2(500) ;
new deptno NUMBER(2) ;
new dname VARCHAR2(14) := ADVERTISING ;
VARCHAR2(13) := NEW YORK ;
new loc
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
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
modification du code : ALTER ou REPLACE
suppression : DROP
c M. Mathieu
148
Bases de donnes
2004-2005
Exemple 1 :
Exemple 2 :
149
Bases de donnes
2004-2005
150
Bases de donnes
2004-2005
Chapitre 6 :
JAVA et Oracle
c M. Mathieu
151
Bases de donnes
2004-2005
c M. Mathieu
152
Bases de donnes
c M. Mathieu
2004-2005
153
Bases de donnes
2004-2005
c M. Mathieu
154
Bases de donnes
2004-2005
Packages java
Nous utiliserons les classes dfinies dans le package java.sql
DriverManager, Connection, Statement et ResultSet
Les rsultats (les valeurs des champs de la base) sobtiennent avec les mthodes get ? ? dfinies par linterface ResultSet. Les mthodes existent sous deux
formes autorisant laccs aux donnes soit par le nom du champ, soit par son index dans le ResultSet
les dates :
c M. Mathieu
155
Bases de donnes
2004-2005
Exemple :
import
import
import
import
java.sql.*
java.math.*
java.io.*
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
c M. Mathieu
157
Bases de donnes
2004-2005
c M. Mathieu
158
Bases de donnes
2004-2005
c M. Mathieu
159
Bases de donnes
2004-2005
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 :
c M. Mathieu
162
Bases de donnes
2004-2005
c M. Mathieu
163
Bases de donnes
2004-2005
c M. Mathieu
164
Bases de donnes
while( sales.next() )
{
System.out.println(
System.out.println(
System.out.println(
System.out.println(
System.out.println(
2004-2005
);
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
166
Bases de donnes
2004-2005
Fonction cre.
SQL>
Appel termin.
SQL> PRINT :R ;
R
-------------------------------Bonjour !
SQL> SELECT TESTJAVA() FROM DUAL ;
TESTJAVA()
--------------------------------------------------------Bonjour !
c M. Mathieu
167
Bases de donnes
2004-2005
qui est compil et charg dans la base avec loadjava. Au niveau de SQL*Plus :
SQL>
SQL>
2
3
4
Fonction cre.
c M. Mathieu
168
Bases de donnes
2004-2005
c M. Mathieu
169
Bases de donnes
2004-2005
Chapitre 7 :
Programmation C et Oracle
c M. Mathieu
170
Bases de donnes
2004-2005
171
Bases de donnes
2004-2005
c M. Mathieu
172
Bases de donnes
2004-2005
c M. Mathieu
173
Bases de donnes
2004-2005
Le prcompilateur se trouve dans $ORACLE HOME/bin et transforme un programme 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/.
c M. Mathieu
174
Bases de donnes
c M. Mathieu
2004-2005
175
Bases de donnes
2004-2005
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 ;
c M. Mathieu
177
Bases de donnes
2004-2005
178
Bases de donnes
2004-2005
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 identifie une ligne retourne dune table dans une requte. Les instructions :
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 :
c M. Mathieu
182
Bases de donnes
2004-2005
c M. Mathieu
183