Bases de données avancées : Concepts clés
Bases de données avancées : Concepts clés
AVANCÉES
LGI3
2021-2022
Pr Cheikhou THIAM
cthiam@[Link]
B as es de données avancées 2
2
TION
B ase de données (BD) : Collection de
données
cohérentes et
structurées
≠
Base de
données Fichier
3
Bases de données avancées s 3
ORGANISATION EN FICHIERS
Fichie
r
État
Saisi Traitement de
e sortie
4
4
Bases de données avancées
N EN B D
Saisie
+ B as Traitements
e
de
Contrôles
donn
ées
États
de
sortie
5
5
Bases de données avancées
L’ORGANISATION EN B D
Uniformisation de la saisie
Standardisation des
traitements Contrôle de la
6
plusieurs
Bases traitements
de données avancées 6
QU’UN SGB D ?
Système de Gestion de B a se s de
Données : Logiciel(s) assurant
structuration, stockage, maintenance,
mise à jour et consultation des données
d’une B D
Exemples
– S G B D « bureautiques » : Access, Base, Filemaker,
– Paradox S G B D serveurs : Oracle, DB2, SQ L Server,
PostgreSQL, MySQL, M a r i a D B …
7
7
Bases de données avancées
CONCEPTION D’UNE B D
Problém a Indépendant d’un
- tique
système de gestion de
Cahier des
B D (SGBD)
charges
S pécifica
- tions
Rédactio
n
Modèle Spécifi qu
conceptu
el e
Analys
e Famille de
M odèl S G B D
e
Traductio log iqu SGBD
n e particulier
Modèle
8
8
Bases de données avancées
COURS
Partie 1 : Modélisation
conceptuelle
9
9
Bases de données avancées
PARTIE 1
MODÉLISATION
CONCEPTUELLE
10
10
B as es de données avancées
MODÈLE CONCEPTUEL UML
Ensemble de formalismes
graphiques Diagramme de
classes
11
[Link] 11
Bases de données avancées /
CLASSES ET ATTRIBUTS
Classe : Groupe d’entités du monde réel ayant les
m ê m e s caractéristiques et le mê me comportement
ex. ETUDIANT
Représentation graphique :
12
12
Bases de données avancées
ATTRIBUTS
Type
d’attribut
– Nombre :entier
– (Entier) Nombre
– réel (Réel)
– Chaîne de caractères
(Chaîne) Date (Date)
13
13
Bases de données avancées
INSTANCES
Objets (individus) de la classe ETUDIANT = les
étudiant·es
Nom Prénom DateNaiss Etc.
Dupont Albertine 01/06/1993 ...
West James 03/09/1994 ...
Martin Marie 05/06/1995 ...
Abidi Rachid 15/11/1995 ...
Titgoutte Justine 28/02/1996 ...
Dupont Noémie 18/09/1995 ...
Dupont Albert 23/05/1990 ...
14
Dupont ? 14
Bases de données avancées
IDENTIFIANT (1/2)
15
5552 Titgoutte Justine 28/02/199 15
Bases de données avancées
6
IDENTIFIANT (2/2)
Le numéro d’étudiant est un attribut
identifiant.
Convention graphique :
N B : Ne pas confondre
avec les attributs de
classe UML dont c’est la
notation usuelle
16
16
Bases de données avancées
ASSOCIATIONS
17
17
Bases de données avancées
RÉCURSIVES
Rôle : fonction de
chaque classe
participante (+).
18
18
Bases de données avancées
MULTIPLICITÉ (OU CARDINALITÉ)
19
Bases de données avancées 4[Link]
à 10) 19
– M..N
ASSOCIATIONS 1-1
ex. Un·e étudiant·e possède une et une seule
carte Izly. Cette dernière n’est possédée que
par un·e seul·e étudiant·e.
20
Izly ».
Bases de données avancées 20
ASSOCIATIONS 1-N
ex. Une épreuve relève d’une et une seule
matière. Une matière peut donner lieu à
plusieurs épreuves.
21
21
Bases de données avancées
ASSOCIATIONS 0 OU 1-N
ex. Un·e étudiant·e peut appartenir ou non
à un groupe de TD. Un groupe de TD
réunit plusieurs étudiant·es.
22
22
Bases de données avancées
ASSOCIATIONS M-N
ex. Un·e étudiant·e peut passer plusieurs
épreuves. Une épreuve peut être passée par
plusieurs étudiant·es.
23
23
Bases de données avancées
CLASSES-ASSOCIATIONS
Il est possible de caractériser une association
par des attributs.
ex. Un · e étudiant · e qui passe une épreuve obtient
une note.
24
Bases
B
pdeala
a ses cde
sd onune
snsavancées
données ée
25
EXEMPLE : SPÉCIFICATIONS (1/2)
25
25
Bases de données avancées
EXEMPLE : SPÉCIFICATIONS (2/2)
26
26
Bases de données avancées
D É M A RC H E D E MODÉLIS ATION CONCEPTUELLE
1. Identifier clas s e
les s
as s ociatio entre les
2. Identifier ns classes
les attribut de chaque
et de chaque s classe-classe
3. Identifier
association
4. les
Identifier et souligner l’identifiant de chaque
classe
m ultiplicité
5. Évaluer less des associations
27
27
Bases de données avancées
EXEMPLE : D I AG RA M M E DE
CL ASSES
28
28
B as es de données avancées
PARTIE 2
MODÉLISATION
LOGIQUE
29
29
B as es de données avancées
RELATIONNEL
Objectifs du modèle
– Indépendance relationnel
physique
– Traitement du problème de redondance des
– données Langages non procéduraux (faciles à
– utiliser) Devenir un standard
30
[Link] 30
Bases de données avancées /
S GB D RELATIONNELS
31
Utilisation interactive ou à
[Link] 31
Bases de données avancées /
ATTRIBUTS Modèle
relationne
l
32
D101', … }
Bases de données avancées[Link]
/
32
TS Modèle
relationn
el
33
[Link] 33
Bases de données avancées /
D’INTÉGRITÉ (1/2) Modèle
relationn
el
34
[Link] 34
Bases de données avancées /
D’INTÉGRITÉ (2/2) Modèle
relationn
el
35
[Link] 35
Bases de données avancées /
PRATIQUE Modèle
relationn
el
EPREUVE MATIERE
36
[Link] 36
Bases de données avancées /
RELATIONNEL (1/4)
Chaque classe devient une relation.
37
[Link] 37
Bases de données avancées /
RELATIONNEL (2/4)
38
[Link] 38
Bases de données avancées /
RELATIONNEL (3/4)
39
[Link] 39
Bases de données avancées /
RELATIONNEL (4/4)
40
[Link] 40
Bases de données avancées /
LOGIQUE RELATIONNEL Modèle
relationn
el
GROUPE_TD (CodeGroupe)
41
[Link] 41
Bases de données avancées /
ASSOCIATION M-N Modèle
relationn
el
ETUDIANT
N um Etu N om
Prénom
1110 Dupont Albertine PASSER (table « pont
2002 West James »)
N u m E t u Code E pr# Note
#
EPR E UV 1110 INFOS101 15,5
ECodeEp D ateEp Lie 2002 ECOS101 8,5
r r u
ECO S 1 0 15/01/201 Aubra 2002 ECOS102 13
1 6 c
ECO S 1 0 16/01/201 Aubra 1110 GESS201 14
2 6 c 2002 GESS201 14,5
G ES S 2 25/05/201 D 20
01 6 1
INFOS10 20/01/201 D 10
42
1 6 1
[Link] 42
Bases de données avancées /
REDONDANCE Modèle
relationn
el
43
[Link] 43
Bases de données avancées /
REDONDANCE Modèle
relationn
e
Anomalies de suppression
ex. La suppression de l’étudiant n° 2 0 0 2 fait
perdre toutes les informations concernant
l’épreuve ECOS102.
44
[Link] 44
Bases de données avancées /
REDONDANCE
Pourquoi
?– Suppression des problèmes de mise à
– jour Minimisation de l’espace de
stockage
Comment
?– D a n s le modèle conceptuel, ne spécifier que des
attributs non décomposables (première forme
normale).
–
ex. Une adresse doit être décomposée en rue, code postal,
ville…
45
C’est tout ! [Link] 45
Bases de données avancées /
Partie 3
Interrogation
et manipulation
de bases de
données
[Link] 46
46
B as es de données avancées
/
RELATIONNELLE ? Modèle
relationn
el
47
[Link] 47
Bases de données avancées /
ENSEMBLISTES (1/5) Modèle
relationn
el
48
B as e s de données
Bases de données
avancées avancées
[Link]
/
R S 49
ENSEMBLISTES (2/5) Modèle
relationn
el
Intersection : T = R ∩ S
ou T = INTERSECT (R, S)
R et S doivent avoir mê me schéma.
ex. Permet de trouver les étudiant·es
commun·es à deux formations.
Notation T
graphique :
�
�
R S
49
[Link]
Bases de données avancées /
ENSEMBLISTES (3/5) Modèle
relationn
el
Différence : T = R -
S ou T = MINU S (R,
R et S doivent
S) avoir m ê m e schéma.
ex. Permet de retirer les étudiant·es de la
relation S existant dans la relation R.
Notation T
graphique : -
R S
50
[Link]
Bases de données avancées /
ENSEMBLISTES (4/5) Modèle
relationn
el
Produit cartésien : T= R x S
ou T = PRODUCT (R, S)
Associe chaque n-uplet de R à chaque n-uplet
de S. Notation graphique :
T
x
R S
51
[Link]
Bases de données avancées /
CARTÉSIEN Modèle
relationn
el
52
Bases de données avancées [Link] c
/
ENSEMBLISTES (5/5) Modèle
relationn
el
Division : T = R ÷ S
ou T=
R (A 1 , DIVISION
A 2 , … , A n ) (R, S) , … , A )
S (A p+ 1 n
53
[Link]
Bases de données avancées /
ION Modèle
relationn
el
ex.
NumEtu CodeEprNote
101 IINNFFO 11
O11 CodeEprNote
101 ECO1 15 ÷ INFO 1
101 ECO2 12 1 1
102 ECO1 9 ECO2 1
103 IINNFFO 11 2
O11 NumEtu
103 ECO2 12 = 101
103
54
[Link]
Bases de données avancées /
SPÉCIFIQUES (1/3) Modèle
relationn
el
55
[Link]
Bases de données avancées /
SPÉCIFIQUES (2/3) Modèle
relationn
el
56
[Link]
Bases de données avancées /
SPÉCIFIQUES (3/3) Modèle
relationn
el
57
[Link]
Bases de données avancées /
REQUÊTE (1/4) Modèle
relationn
el
RESULTAT
Nom,
CodeEpr,
Note
NumEt NumEt
u = u
ETUDIANT PASSER
58
[Link]
Bases de données avancées /
REQUÊTE (2/4) Modèle
relationn
el
Décomposition des
opérations
ETUDIANT PASSER
NumEtu NumEtu CodeEpr Note
Nom 101 INFO1
102
101 E2
E1 X 103
10 INFO1 15
103 E3 103 ECO1 12
59
[Link]
Bases de données avancées /
REQUÊTE (3/4) Modèle
relationn
el
60
10
Bases de données avancées E3 10
[Link] 1 1
/
REQUÊTE (4/4) Modèle
relationn
el
ETUDIANT ▷ ◁
PASSER
[Link] Nom [Link] CodeEpr Note
101 E1 101 INFO1 10
103 E3 103 INFO1 15
103 E3 103 ECO1 12
61
[Link]
Bases de données avancées /
S GB D RELATIONNELS
62
[Link]
Bases de données avancées /
QUE SQL ?
63
[Link]
Bases de données avancées /
PRINCIPAUX LDD
64
[Link]
Bases de données avancées /
D’INTÉGRITÉ LDD
Clé étrangère :
FOREIGN KEY (clé) RE F E RE NC E S
table(attribut)
Contrainte de domaine :
CHECK (condition)
65
[Link]
Bases de données avancées /
DÉFINITION DES LDD
DONNÉES (1/2)
ex
.
CREATE TABLE Etudiant NumEtu NUMBER(8),
( Nom VARCHAR(255),
Prenom
VARCHAR(255),
DateNaiss DATE,
Rue
VARCHAR(255),
CP NUMBER(5),
CONSTRAINT EtuClePri PRIMARY
VilleKEY )
(NumEtu) VARCHAR(255),
66
Bases de données avancées
DÉFINITION DES LDD
DONNÉES
ex. (2/2)
CREATE TABLE Passer ( NumEtu NUMBER(8),
CodeEpr
VARCHAR(10), Note
NUMBER(5, 2),
(NumEtu)
REFERENCES Etudiant (NumEtu),
67
Bases de données avancées REFERENCES Epreuve (CodeEpr),
[Link]
/
STRUCTURELLES (1/2) LDD
Ajout d’attributs
ALTER TABLE nom_table A D D (attribut TYPE, … )
ex. ALTER TABLE Etudiant A D D (tel
NUMBER(8))
Modifications d’attributs
ALTER TABLE nom_table MODIFY (attribut TYPE,
…)
ex. ALTER TABLE Etudiant MODIFY (tel
NUMBER(10))
Suppression d'attributs
ALTER TABLE nom_table D R O P COLUMN
attribut, ...
68
Bases de données avancées
STRUCTURELLES (2/2) LDD
Ajout de contrainte
ALTER TABLE nom_table
A D D CONSTRAINT nom_contrainte définition_contrainte
ex. ALTER TABLE Epreuve
A D D CONSTRAINT LieuValide CHECK (Lieu IN (‘Say’,
‘Aubrac’))
Suppression de contrainte
ALTER TABLE nom_table D R O P CONSTRAINT nom_contrainte
ex. ALTER TABLE Epreuve
D R O P CONSTRAINT LieuValide
69
Bases de données avancées
EX LDD
70
Bases de données avancées
ES LDD
71
Bases de données avancées
VUES (1/2) LDD
SELECT NumEtu, N o m F R O M
notesParEtudiant W H E R E Note > 1 0
72
Bases de données avancées
VUES (2/2) LDD
73
Bases de données avancées
UNE VUE LDD
74
Bases de données avancées
SYSTÈMES LDD
ALL_TABLES (OWNER,
TABLE_NAME, … ) ALL_VIEWS
(OWNER, VIEW_NAME, … )
ALL_CONSTRAINTS (OWNER, TABLE_NAME,
CONSTRAINT_NAME, CONSTRAINT_TYPE,
SEARCH_CONDITION, ...)
ALL_CONS_COLUMNS (OWNER, TABLE_NAME,
CONSTRAINT_NAME, COLUMN_NAME, ...)
USER_CATALOG (TABLE_NAME, TABLE_TYPE)
USER_TAB_COLUMNS (TABLE_NAME,
..
USER_CONSTRAINTS (TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_TYPE,
CONSTRAINT_NAME, …)
75
SEARCH_CONDITION, ...)
BasesUSER_IND_COLUMNS
de données avancées (INDEX_NAME,
[Link]
/ TABLE_NAME,
VUES SYSTÈMES LDD
76
CONSTRAINT_NAME F RO[Link]
M
Bases de données avancées
ALL_CONSTRAINTS /
DONNÉES LMD
Suppression de n-uplets
ex. DELETE F RO M
Etudiant W H E RE
Ville = ‘Lyon’
ex. DELETE F RO M
77
Epreuve
Bases de données avancées
DES DONNÉES LMD
78
Bases de données avancées
requête dans les transparents suivants.
CHAMP CALCULÉ LMD
Tri du résultat
ex. Par ordre alphabétique [inverse] de
nom SELECT * F R O M Etudiant
O R D E R BY N o m [DESC]
Champs calculés
ex. Transformation de notes sur 2 0 en notes
sur 1 0 S ELEC T N ote / 2 FR O M Pas s er
79
[Link]
Bases de données avancées /
RESTRICTION LMD
Projection
ex. N o m s et Prénoms des étudiant·es,
uniquement (pas les autres attributs)
SELECT Nom, Prénom F R O M Etudiant
Suppression des doublons
ex. SELECT DISTINCT N o m F R O M Etudiant
Restriction
ex. Étudiant·es qui habitent à
Lyon SELECT * F R O M
Etudiant W H E R E Ville =
‘Lyon’
80
[Link]
Bases de données avancées /
RESTRICTION (1/3) LMD
81
Bases de données avancées
RESTRICTION (2/3) LMD
‘sur-Saône%’ ⇒ commence
par sur-Saône
‘%sur%’ ⇒ contient le
mot sur
82
Bases de données avancées
RESTRICTION (3/3) LMD
83
Bases de données avancées
LOGIQUES LMD
84
Bases de données avancées
D’AGRÉGAT LMD
85
Bases de données avancées
OPÉRATEUR DISTINCT LMD
86
[Link]
Bases de données avancées /
COUNT/DISTINCT LMD
Table PASSER
COUNT(NumEtu) ⇒ Résultat = 3
COUNT(DISTINCT NumEtu) ⇒
Résultat = 2
87
Bases de données avancées
(1/3) LMD
NumEt NumEt
u = u
ETUDIANT PASSER
88
Bases de données avancées
(2/3) LMD
NB : Utilisation d’alias
(E et P) pour alléger
89
l’écriture
Bases de données avancées
(3/3) LMD
90
Bases de données avancées
D’EXISTENCE LMD
Prédicats E X IS TS / N O T E X IS TS
ex. Étudiant·es qui ont passé au moins une
épreuve [n’ont passé aucune épreuve]
SELECT * F R O M
Etudiant E W H E R E
[NOT] EXISTS (
SELECT * F R O M Passer P
W H E R E [Link] =
91
[Link] )
Bases de données avancées
DÉNOMBREMENT LMD
Prédicats ALL / AN Y
92
Bases de données avancées
T (1/2) LMD
93
Bases de données avancées
GROUP BY
T (2/2) LMD
Attention : La clause
HAVING ne s’utilise qu’avec
GROUP BY.
94
Bases de résultat de groupement (a posteriori)
données avancées
ION LMD
! De u x stratégies :
– Étudiant·es tels qu'il n'existe pas d’épreuve tel qu'il
n'existe pas de « passage » pour cet étudiant·e et cette
– épreuve.
Étudiant·es qui ont passé un nombre distinct d’épreuves
95
égal au nombre total d’épreuves.
Bases de données avancées
LOGIQUE LMD
SELECT NumEtu
FROM Etudiant Et
WHERE NOT EXISTS
(
SELECT *
FROM Epreuve Ep
WHERE NOT EXISTS
(
SELECT *
FROM Passer
P
96
Bases de données avancées WHERE [Link] = [Link]
COMPTAGE LMD
SELECT NumEtu F R O M
Etudiant E W H E R E ( SELECT
COUNT(CodeEpr)
F R O M Passer P
W H E R E [Link]
= [Link] )
= ( SELECT COUNT(*) F R O M
Epreuve )
ou
SELECT NumEtu F R O M
Passer GROUP BY NumEtu
97
HAVING
Bases de données avancées COUNT(CodeEpr)
ENSEMBLISTES LMD
98
Bases de données avancées
(1/5) LMD
Exemple de V él
o
hiérarchie
(nomenclature) : C ad R ou
re es
Relation associée :
ELEMENT (No_Elt, Dési, P ne R ayo
Parent#) u ns
1 Vélo NULL
2 Cadre 0
3 Roue 0 6 Rayon1 2
1 0 1 2
4 Roue 2 7 Rayon1 2
2 3 2 3
99
5 Pneu 8 Rayon1
Bases de données avancées
1 3
(2/5) LMD
100
e avancées
Bases de données
(3/5) LMD
101
Rayon11 3 Pneu2
Bases de données avancées
3
(4/5) LMD
Résultat 1 Velo 3
: 2 Cadre Rayon12
3 Roue1 3
4 Pneu1 Rayon13
3 2 Roue2
102
Bases de données avancées
Rayon11
(5/5) LMD
COUNT(No_Elt)
FROM Element
CONNECT BY Parent = PRIOR
103
No_Elt START WITH Parent IS
NULL
Bases de données avancées
FONCTIONS SQL (1/2)
– ABS(n) : Valeur absolue de n – LOWER(ch) : c en minuscules
– CEIL(n) : Plus petit entier ≥ n – UPPER(ch) : c en majuscules
– – LTRIM(ch, n) : Troncature à
FLOOR(n) : Plus grand entier
– – gauche RTRIM(ch, n) :
≤ n MOD(m, n) : Reste de
– Troncature à droite
– m/n POWER(m, n) : mn
– REPLACE(ch, car) :
– SIGN(n) : Signe de n – Remplacement de caractère
– SQRT(n) : Racine carrée – SUBSTR(ch, pos, lg) : Extraction de chaîne
– de n – SOUNDEX(ch) : Représentation phonétique
– ROUND(n, m) : Arrondi à 10-m de ch LPAD(ch, lg, car) : Compléter à
– TRUNC(n, m) : Troncature à gauche
– 10-m RPAD(ch, lg, car) : Compléter à droite
CHR(n) : Caractère ASCII n°
104
n INITCAP(ch) : 1re lettre
en de
Bases maj.
données avancées
SQL (2/2) LMD
105
Date/heure système
Bases de données avancées
DE FONCTIONS LMD
106
Bases de données avancées
TRANSACTIONS LCD
107
1 2 3
Bases de données avancées
TRANSACTIONS LCD
108
Bases de données avancées
TEURS LCD
Création
– ex. CREATE U S E R moi_meme
IDENTIFIED BY mon_mot_de_passe
Suppression
– ex. D R O P U S E R moi_meme C A S C A D E
Modification
– ex. ALTER U S E R moi_meme IDENTIFIED BY
aaaaa
109
Bases de données avancées
GLOBAUX LCD
110
ANY VIEW
Bases de données avancées
LES OBJETS B D LCD
111
Bases de données avancées
LES LCD
Rôles
prédéfinis
– CONNECT : droit de création de tables, vues,
– synonymes, etc. RE S OU RC E : droit de création de
procédures stockées, déclencheurs, etc.
– D B A : administrateur de la B D
Création de nouveaux
rôles
– ex. CREATE ROLE role1
112
Bases de données avancées
PRIVILÈGES LCD
Transmission de privilèges
GRANT privilège O N table|vue
TO user|PUBLIC [WITH GRANT
OPTION]
113
– ex. GRANT CREATE ANY TABLE TO toto
Bases de données avancées
PRIVILÈGES LCD
Suppression de privilèges
REVOKE privilège O N table|vue F R O M user|
PUBLIC
114
ex. REVOKE role1 F R O M toto
Bases de données avancées
L SQL
Pour approfondir SQL en
ligne…
115
Bases de données avancées
Partie 4
Programmation
de bases de
données
116
B as es de données avancées
UN PROGRAMME
SQL encapsulé : Requêtes SQ L incorporées dans le code C
source (PL/SQL, T-SQL, PL/pgSQL, Pro*C…)
117
Bases de données avancées
LANGAGE PL/SQL (1/2)
Langage de 4 e génération (L4G = L3G + syntaxe
type SQL)
S QL Déclaration de variables et de
constantes
118
paquetages)
Bases de données avancées
LANGAGE PL/SQL (2/2)
SQ L dynamique (construction de requêtes à la
volée)
systèmes Oracle)
119
Sécurité (procédures stockées,
Bases de données avancées
D’ORACLE
Génie
Résea
u
log icie SQ
S QlL L
Developer
S erveu
r
Oracle
PL/
Lo g iciel SQL Administratio
s n
120
tiers
Bases de données avancées
ORACLE
Oracle Database
PL/SQL User’s Guide
and Reference
121
Bases de données avancées
BLOCS
Bloc anonyme
– Stocké dans un fichier
– Compilé et exécuté à la
volée B
Procédure A
stockée
– Compilée a priori
– Stockée dans la base de Dé
données c
B
D éclenche D
ur
– Procédure stockée associée à une table PS
– Exécution automatique à la suite d’un
événement
122
Bases de données avancées
D’UN BLOC
[DECLARE
-- Types, constantes et variables]
BEGIN
-- Instructions PL/SQL
[EXCEPTION
-- Gestion des erreurs]
END;
123
Bases de données avancées
CONSTANTES
124
Bases de données avancées
DONNÉES
Oracle Database
PL/SQL User’s Guide
and Reference
125
Bases de données avancées
TYPE EXISTANT
126
Bases de données avancées
DE VARIABLE
Affectation simple
ex. n : = 0;
n : = n + 1;
127
5000;
Bases de données avancées
LOGIQUES
Opérateurs + - / *
arithmétiques **
O pérateur de concaténation ||
128
Bases de données avancées
(1/2)
IF-THEN, IF-THEN-ELSE ou IF-THEN-
ELSIF
IF condition1 THEN
-- Statements
[ELSIF condition2 THEN
-- Instructions
PL/SQL]
[ELSE
-- Instructions PL/SQL]
129
Bases de données avancées END IF;
(2/2)
CASE
CASE variable
WHEN val1 THEN -- Instruction PL/SQL
WHEN val2 THEN -- Instruction PL/SQL
WHEN val3 THEN -- Instruction PL/SQL
[ELSE -- Instruction par
défaut]
END CASE;
130
Bases de données avancées
CLES
Pour
FOR iterateur IN [REVERSE] min..max
LOOP
-- Instructions
PL/SQL E N D LOOP;
Tant que
WHILE condition
LOOP
-- Instructions
PL/SQL E N D LOOP;
Répéter
LOOP
-- Instructions
131
PL/SQL EXIT W H E N
Bases de données avancées condition;
ÉCRAN
DBMS_OUTPUT.PUT('chaîne'); /* Pas de retour à la ligne
DBMS_OUTPUT.PUT_LINE('chaîn */
e');DBMS_OUTPUT.PUT('Hello world /* Retour à la ligne */
!');
DBMS_OUTPUT.PUT_LINE('nom = ' || nom);
DBMS_OUTPUT.PUT_LINE('n = ' || TO_CHAR(n));
DBMS_OUTPUT.PUT_LINE('n = ' || n);
NB : Pour que l’affi chage fonctionne, il faut mettre la variable
d’environnement SERVEROUTPUT à ON.
SET SERVEROUTPUT ON dans SQL
Developer
En cas de dépassement, la taille du tampon d’affi chage doit être
augmentée. ex. DBMS_OUTPUT.ENABLE(10000);
132
Bases de données avancées
ANONYME
-- Calcul de prix TTC
DECLARE
taux_tva CONSTANT REAL := 0.2;
prix product.prod_price%TYPE;
BEGIN
-- Affectation du prix
SELECT prod_price INTO prix FROM product
WHERE prod_code = 'Pr345blue';
-- Ajout de la TVA
prix := prix * (1 + taux_tva);
-- Affichage écran
DBMS_OUTPUT.PUT_LINE(prix || ' euros');
END;
133
Bases de données avancées
TIONS
Définition : Ensemble ordonné d’éléments de m ê m e type.
Chaque élément est indexé par sa position dans la
collection.
Deux types(VARRAY)
– Tableau de collections
: taille bornée, dense
– Liste (TABLE) : taille extensible, non-
dense
Oracle Database
PL/SQL User’s Guide
and Reference
134
Bases de données avancées
COLLECTION
1. Déclarer un type
collection
ex TYPE Liste_Chaines IS TABLE OF
. VARCHAR(20);
TYPE Tableau_Entiers IS VARRAY(10) OF
INTEGER;
2. Déclarer une collection et
l’initialiser
ex ma_liste Liste_Chaines : = Liste_Chaines('Aa', 'Bb',
. 'Cc'); t Tableau_Entiers : = Tableau_Entiers();
135
Bases de données avancées
COLLECTION
Collection
entière
ex. TYPE T1 IS TABLE OF
D ECLARE INT; TYPE T2 IS TABLE
OF INT; et11 T1 : =
T1(1, 2, 3, 4);
et12 T1 : = T1(5, 6);
BEGI et2 T2 : = T2();
N et12 : = et11; --
… Légal et2 : = et11; --
Illégal
Elément d’une
collection
ex. et11(1) : = 10;
136
Bases de données avancées
COLLECTION (1/2)
Ensemble de méthodes ( ≈ procédures)
Usage: nom_collection.nom_methode[(paramètres)]
collection.
137
listes). EXTEND(n) augmente la taille de la collection de n.
Bases EXTEND(1)
de données avancées ⇔ EXTEND
COLLECTION (2/2)
138
N B : FIRST = 1 et LAST = COUNT dans un tableau.
Bases de données avancées
COLLECTION
DECLARE
TYPE ListeEntiers IS TABLE OF INTEGER;
pile ListeEntiers := ListeEntiers();
element INTEGER;
BEGIN
-- On empile les valeurs 1 et 11
[Link];
pile([Link]) := 1;
[Link];
pile([Link]) :=
11;
-- On dépile
element := pile([Link]); -- element = 11
[Link]; -- Suppression en haut de pile
139
Bases de données avancées
EMENTS
Définition : Ensemble de données liées stockées
dans des champs.
140
Bases de données avancées
D’ENREGISTREMENT
Référence directe
ex. un_etudiant.numetu : =
12212478;
un_etudiant.nom : = 'Toto';
un_etudiant.age : = 6;
un_etudiant : = mon_etudiant; --
équivalent à Etudiant
%ROWTYPE
Résultat de requête
ex. SELECT student_number, student_name,
student_age INTO un_etudiant
141
FRO M student
Bases de données avancées
DURES
142
Bases de données avancées
IONS
143
Bases de données avancées
DÉCLARATION/PARAMÉTRAGE DE SOUS-
PROGRAMMES
144
Bases de données avancées
référence)
PROCÉDURE
BEGIN
prix_EUR := prix_USD * taux;
END;
145
Bases de données avancées
(RÉCURSIVE)
-- Calcul de n!
BEGIN
IF n = 1 THEN -- Condition d’arrêt
RETURN 1;
ELSE
RETURN n * facto(n - 1); -- Appel récursif
END IF;
END;
146
Bases de données avancées
PROGRAMMES
-- Exemple
D E C L AR E
hundredBucks CONSTANT REAL : =
100; resEuro REAL;
fact10 INTEGER;
BEGIN
Conversion_USD_EUR(hundredBucks,
resEuro); fact10 : = facto(10);
END;
147
Bases de données avancées
CURSEUR
Déclaration : C U R S O R nom_curseur IS
requete_SQL; ex. C U R S O R calc_TVA IS
SELECT prod_num, price * 1.2 A S
prix_TTC F R O M product;
148
Bases de données avancées
IMPLICITE
-- Parcours complet du curseur
DECLARE
CURSOR calc_TVA IS
SELECT prod_num, price * 1.2 AS prix_TTC
FROM product;
nuplet calc_TVA%ROWTYPE;
BEGIN
FOR nuplet IN calc_TVA LOOP
DBMS_OUTPUT.PUT_LINE(
nuplet.prod_num
|| ' : ' ||
nuplet.prix_TTC);
149
END LOOP;
Bases de données avancées
EXPLICITE
-- Parcours ad hoc du curseur
DECLARE
-- Comme précédemment
BEGIN
OPEN calc_TVA;
FETCH calc_TVA INTO nuplet; -- 1re ligne
WHILE calc_TVA%FOUND LOOP
-- Instructions PL/SQL
FETCH calc_TVA INTO nuplet; -- Ligne suivante
END LOOP;
CLOSE calc_TVA;
END;
150
Bases de données avancées
CURSEURS
151
% I S O P E N est égal à TRUE si le curseur est ouvert.
Bases de données avancées
PARAMÉTRÉ
DECLARE
CURSOR c(s number) IS SELECT ename, sal FROM emp WHERE sal
>= s; nuplet c%ROWTYPE;
BEGIN
OPEN c(2500);
FETCH c INTO
nuplet; WHILE c
%FOUND LOOP
DBMS_OUTPUT.PUT_LINE([Link] || ' : ' ||
[Link]); FETCH c INTO nuplet;
END
LOOP;
152
CLOSE
Bases de données avancées
c;
IONS
153
associé
Bases de données avancées
SYSTÈMES
Libellé erreur Code SQLCODE
erreur
CURSOR_ALREADY_OPEN ORA-06511 -6511
DUP_VAL_ON_INDEX ORA-00001 -1
INVALID_CURSOR ORA-01001 -1001
INVALID_NUMBER ORA-01722 -1722
LOGIN_DENIED ORA-01017 -1017
NO_DATA_FOUND ORA-01403 -1403
NOT_LOGGED_ON ORA-01012 -1012
PROGRAM_ERROR ORA-06501 -6501
STORAGE_ERROR ORA-06500 -6500
TIMEOUT_ON_RESOURCE ORA-00051 -51
TOO_MANY_ROWS ORA-01422 -1422
VALUE_ERROR ORA-06502 -6502
ZERO_DIVIDE ORA-01476 -1476
154
[Link]
Bases de données avancées /
PERSONNALISÉES
Déclaration (section DECL ARE)
nom_e xception EXCEPTION;
Gérer l’exception
(section EXCEPTION)
155
WHEN
Bases de données avancées
D’EXCEPTION
DECLARE
c INTEGER;
personne EXCEPTION;
BEGIN
SELECT COUNT(*) INTO c FROM
emp; IF c = 0 THEN
RAISE personne;
END IF;
EXCEPTION
WHEN personne
THEN
RAISE_APPLIC
ATION_ERROR(-
156
20501, 'Table
vide !');
Bases de données avancées
GESTION D’EXCEPTIONS IMPRÉVUES
DECLARE
i INTEGER := &saisie;
e1 EXCEPTION;
e2 EXCEPTION;
BEGIN
IF i = 1 THEN
RAISE e1;
ELSIF i = 2 THEN
RAISE e2;
ELSE
i := i / 0;
END IF;
EXCEPTION
WHEN e1 THEN RAISE_APPLICATION_ERROR(-20001, 'Exception
1'); WHEN e2 THEN RAISE_APPLICATION_ERROR(-20002,
'Exception 2'); WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-
157
20999, SQLERRM);
Bases de données avancées
END;
PROCÉDURES STOCKÉES
158
Bases de données avancées
PA Q U E TA G E S
Oracle 8
documentation
(Fig. 8-1)
159
Bases de données avancées
DÉFINITION D’UN PAQUETAGE
-- Définition de la spécification
CREATE [OR REPLACE] PACKAGE nom_paquetage AS
[-- Définition de types publics]
[-- Déclaration de curseurs publics]
[-- Déclaration de variables globales publiques (à éviter !)]
[-- Déclaration de sous-programmes publics]
END;
-- Définition du corps (optionnelle)
CREATE [OR REPLACE] PACKAGE BODY nom_paquetage AS
[-- Définition de types privés]
[-- Spécification de curseurs publics et privés]
[-- Déclaration de variables globales privées (à éviter !)]
[-- Spécification de sous-programmes publics et privés]
END;
160
Bases de données avancées
DE PAQUETAGE
CREATE OR REPLACE PACKAGE Employes AS
TYPE nuplet IS RECORD (ename [Link]%TYPE,
salary [Link]%TYPE);
CURSOR salaire_dec RETURN nuplet;
PROCEDURE embaucher (
numemp NUMBER,
nom VARCHAR,
job VARCHAR,
mgr NUMBER,
sal NUMBER,
comm NUMBER,
numdep NUMBER);
PROCEDURE licencier (emp_id NUMBER);
END;
161
Bases de données avancées
DE PAQUETAGE
CREATE OR REPLACE PACKAGE BODY Employes AS
CURSOR salaire_dec RETURN nuplet IS
SELECT empno, sal FROM emp ORDER BY sal DESC;
PROCEDURE embaucher (numemp NUMBER,
nom VARCHAR, job VARCHAR,
mgr NUMBER, sal NUMBER,
comm NUMBER, numdep NUMBER) IS
BEGIN
INSERT INTO emp VALUES (numemp, nom, job,
mgr, SYSDATE, sal, comm, numdep);
END;
PROCEDURE licencier (emp_id NUMBER) IS
BEGIN
DELETE FROM emp WHERE empno = emp_id;
END;
END;
162
Bases de données avancées
DÉCLENCHEURS
163
Bases de données avancées
DÉCLENCHEURS
Inse r t i on De l e t i on Update
Be f or e 1 2 3
After 4 5 6
164
Bases de données avancées
DÉCLENCHEUR
ON nom_table [FOR
EACH ROW]
-- Bloc PL/SQL
codant les
actions à
165
effectuer
Bases de données avancées
VARIABLES SPÉCIFIQUES A U X DÉCLENCHEURS
166
ex. DELETE F R O M client W H E R E NumCli = 33;
Bases de données avancées
EXEMPLE DE DÉCLENCHEUR (1/2)
-- Emulation de clé primaire sur la table client
CREATE OR REPLACE TRIGGER client_pk
BEFORE INSERT OR UPDATE ON client
FOR EACH ROW
DECLARE
n INTEGER;
cle_existante EXCEPTION;
cle_nulle EXCEPTION;
BEGIN
-- La clé est-elle vide ?
IF :[Link] IS NULL THEN
RAISE cle_nulle;
167
END IF;
Bases de données avancées
EXEMPLE DE DÉCLENCHEUR (2/2)
-- La clé existe-t-elle déjà ?
SELECT COUNT(NumCli) INTO n FROM client
WHERE NumCli = :[Link];
IF n > 0 THEN
RAISE cle_existante;
END IF;
EXCEPTION
WHEN cle_existante THEN
RAISE_APPLICATION_ERROR(-20501,
'Clé primaire déjà utilisée !');
WHEN cle_nulle THEN
RAISE_APPLICATION_ERROR(-
20502,
'Une clé primaire doit
168
avoir une valeur !');
Bases de données avancées
S Q L STATIQUE VS. S Q L DYNAMIQUE
Exemples
169
Bases de données avancées
DYNAMIQUES
Exécution : EXECUTE IMMEDIATE requete -- requete est une
chaîne [INTO res1, res2…];
Note :
– Requêtes paramétrées : valeurs de la base de données
– (statiques).
Si l’on veut paramétrer des objets (tables, vues, attributs...) :
requête dynamique.
N B : Les requêtes qui altèrent la structure de la base de
données (CREATE, DROP, ALTER…), m ê m e statiques,
doivent être exécutées en mode dynamique.
170
Bases de données avancées
DYNAMIQUES
DECLARE
requete VARCHAR(250);
nom_table CHAR(4) := 'dept';
numdep [Link]%TYPE := 50;
n INTEGER;
BEGIN
-- Construction de requête par
concatenation
requete := 'DELETE FROM '||nom_table||' WHERE deptno = '||numdep;
EXECUTE IMMEDIATE requete;
-- Récupération d'un résultat de requête dynamique
requete := 'SELECT COUNT(*) FROM ' || nom_table;
EXECUTE IMMEDIATE requete INTO n;
END;
171
Bases de données avancées
DYNAMIQUES
DECLARE -- Exemple
TYPE CursDyn IS REF CURSOR; -- Pointeur vers un curseur
emp_cv CursDyn; -- Curseur dynamique
nom [Link]%TYPE;
salaire [Link]%TYPE := 10000;
BEGIN
OPEN emp_cv FOR -- Le curseur est forcément explicite
'SELECT ename, sal FROM emp
WHERE sal > ' || salaire;
FETCH emp_cv INTO nom, salaire;
WHILE emp_cv%FOUND LOOP
-- Instructions PL/SQL
FETCH emp_cv INTO nom, salaire;
END LOOP;
CLOSE emp_cv;
172
END;
Bases de données avancées
FIN
173
B as es de données avancées