Académique Documents
Professionnel Documents
Culture Documents
2ème année – S3
Base de Données 1
Avancées
Prof. Driss AIT OMAR
(d.aitomar@usms.ma)
04 02
Le système accède à OS
l’enregistrement physique
Rappel: Les métier autour des BDs 10
❖Administrateur
❖Responsable de la sécurité
❖Administrateur réseaux
❖Dév l pp s ’ ppl
❖A s s ’ ppl
❖Utilisateurs : modifier les données, créer des rapports
Note:
D s s v s p ll , l’ s p
jouer quasiment tous les rôles
Rappel: Les tâches de l’administrateur de la BD 11
Rappel: Les tâches de l’administrateur de la BD 12
❑ Dans la phase de « conception »
▪ Définition du schéma conceptuel de la base
▪ Règles de gestion, cohérence des informations
▪ Volumétrie
❑ Dans la phase de maintenance
▪ Planification et création des BD
✓ Gestion des structures physiques
✓ Gestion des structures logiques
▪ Gestion de la sécurité, des utilisateurs
▪ Sauvegarde et restauration
▪ Optimisation de la base de données
✓ optimisation de requêtes
▪ Administration du réseau
Rappel: Les tâches de l’administrateur de la BD 13
Grandesfonctions de DBA :
❖ installer le SGBD et les applications clientes
❖ Créer la base de données en faisant des choix au niveau physique
❖ Gérer les utilisateurs
❖ Assurer la cohérence et la sécurité des données
❖ Echanger des données avec l'extérieur
❖ Améliorer les performances
◼ gestion des ressources mémoires
◼ gestion des temps de réponses
Chapitre 0: Introduction à Oracle
14
Histoire d’Oracle
15
Histoire d’Oracle
17
Histoire d’Oracle
En 1997, la version 8 introduit le développement orienté objet et
les applications multimédia.
En 1999, la version 8i est publiée dans le but d'affiner ses applications
avec Internet. La base de données comporte nativement une machine
virtuelle Java.
En 2001, Oracle 9i
En 2004, la version 10g est publiée.
En 2005, vers la fin novembre, une version complètement
gratuite est publiée, la « Oracle Database 10g Express Edition ».
Septembre 2009, sortie de Oracle 11g Release 2
18
Histoire d’Oracle
Oracle Database 10g a introduit l'informatique en grille en 2003.
Oracle Database 11g, sorti en 2007, a introduit une multitude de
nouvelles fonctionnalités qui ont permis aux administrateurs et aux
développeurs de s'adapter rapidement à l'évolution des besoins de
l'entreprise.
Oracle Database 12c, sorti en 2013, a été conçu pour le cloud.
Oracle Database 18c publiée en 2018 a simplifié l'intégration avec les
services d'annuaire tels que Microsoft Active Directory.
Oracle Database 19c ‘2019’: Amélioration de la stabilité.
Oracle Database 21c ‘2020’: le blockchain au cœur (Version actuelle)
19
Généralités
Oracle est un système de gestion de base de données relationnel
(SGBDR).
Depuis l'introduction du support du modèle objet dans sa version 8
Editions:
➢ Entreprise: comprend toutes les fonctionnalités
pas 4 processeurs.
➢ Express: version gratuite, fonctionne sur une machine à un
processeur 20
Généralités
21
Généralités
22
Généralités
❖ Base de données Oracle:
◼ Structure physique:
◼ Fichiers de données, Fichiers redo log, Fichiers de contrôle.
◼ Autres fichiers importants: (fichier de paramètres, fichier de mots de passe)
◼ Structure logique
◼ Tablespace, segment, extent, bloc
❖ Les Processus serveurs: gèrent les requêtes des utilisateurs provenant des
connexions à la base de données; ils sont chargés de:
◼ la communication entre la SGA et le processus utilisateur.
◼ analyser, d'exécuter les requêtes SQL des utilisateurs, de lire les fichiers de
données, de placer les blocs de données correspondants dans la SGA et de
Renvoyer les résultats des commandes SQL au processus utilisateur.
23
Généralités
24
Généralités
26
Généralités
L'utilisateur lance
l'application Oracle sur le processus utilisateur communique
son ordinateur, en créant avec le processus serveur sur le
un processus utilisateur... serveur hôte en utilisant le PGA pour
stocker les informations spécifiques à
User Processus la session.
Serveur
Le processus serveur communique avec l'instance Oracle au
nom de l'utilisateur.
27
Généralités
29
Chapitre 1: Architecture –Instance d’Oracle
30
Architecture - Instance
31
Architecture - Instance : SGA
32
Architecture - Instance : SGA
33
Architecture - Instance : SGA
❑ La dirty list contient les buffers qui ont été modifiés mais ne
sont pas encore écrits sur le disque
❑ La liste LRU contient les buffers libres (qui n'ont pas été modifiés),
les « pinned » buffers (qui sont en cours de modification, les dirty
buffers qui n'ont pas encore été déplacés dans la dirty list
34
Architecture - Instance : SGA
35
Architecture - Instance : SGA
Shared Pool
Permet de stocker plusieurs éléments cruciaux pour la gestion des
données :
◼ Library cache : permet d'analyse l'ordre d'exécution d'une requête SQL et de
définir un plan d'exécution.
◼ Dictionary cache : stocke des les données en provenance du dictionnaire afin
d'accélérer l'accès au dictionnaire (nom d'utilisateurs, privilèges, etc.).
◼ SQL area : stocke les requêtes SQL les plus récemment utilisées par les
utilisateurs de base de données.
◼ Si la même requête est ré-exécutée, le serveur n'analyse pas son ordre. Cela permet
d'améliorer la performance des applications
36
Architecture - Instance : SGA
37
Architecture - Instance :
Processus en arrière plan
39
40
Les processus indispensables
41
Les processus indispensables
42
Les processus indispensables
LOGWR (LoG WRiter)
✓ Ecrit dans les fichiers Redo Log le contenu du cache
Redo Log
✓ Le processus LGWR transcrit les informations contenues
dans le REDO LOG Buffer vers les fichiers REDOLOG
FILE quand :
◼ une transaction s'est terminée avec un COMMIT
◼ le REDO LOG Buffer est au 1/3 plein
◼ Avant que DBWR n'écrive le contenu du Database Buffer
Cache dans les fichiers du disque dur 43
Les processus indispensables
CKPT (CHECKPOINT)
Checkpoint inscrit les informations de point de reprise dans les
fichiers de Controles et dans l'entête de chaque fichier de données.
C'est ce point de reprise (SCN) qui permet de rendre cohérent les
fichiers de controles et les fichiers de données, indispensable pour un
processus de récupération.
44
Les processus indispensables
CKPT (CHECKPOINT)
❑ Le processus Checkpoint n'écrit pas les blocs sur le disque, c'est
le role du processus Database Writer DBWR.
◼ Provoque l'activation du DBWR pour écrire les blocs modifiés
depuis le dernier point de contrôle,
❑ Les numéros SCN enregistrés dans les fichiers garantissent que
toutes les modifications apportées aux blocs de base de données
avant un numéro SCN ont été écrites sur le disque.
◼ En cas d'arrêt anormal de l'instance, ce SCN marque le début des
données à utiliser pour la récupération de l'instance.
45
Les processus indispensables
CKPT (CHECKPOINT)
• Le processus Log Writer (LGWR) n’écrit pas dans le fichier de
journalisation (REDO LOG) tant que le processus CKPT n'a pas
synchronisé, car tant que cette synchronisation n'est pas faite, le
fichier de journalisation contient des données nécessaires à une
éventuelle récupération après défaillance de l'instance.
• A savoir qu'une synchronisation se déclenche aussi à chaque
basculement de REDO LOG, lors de l’arrêt de la base de données,
lors de la mise hors ligne d'un Tablespace.
46
Les processus indispensables
SMON (System MONitor)
✓ System Monitor surveille la base de données lors de son démarrage
c'est à dire faire la récupération de l'instance après un arrêt anormal.
Lors du démarrage de l'instance Oracle, il vérifie si le dernier arrêt a été
correctement effectué.
✓ SMON est aussi chargé de:
◼ libérer les segments temporaires
◼ compacter l'espace contigu dans les Tablespaces
◼ surveiller la base de données.
47
Les processus indispensables
Le processus SMON en action lors d'un arrêt brutal de la base de
données
➢ SMON lit les informations contenu dans les
segments UNDO (données en attente de validation) puis les annule. (ROLL
BACK)
➢ SMON récupère dans les fichiers REDO LOG les enregistrements
validés mais pas encore écrit dans les fichiers de données et les
insère. (ROLL FORWARD).
➢ SMON libère toute les ressources de la base de données (vérrous,
segments temporaires).
48
Les processus indispensables
49
Les processus indispensables
50
Les processus optionnels
51
Les processus server
52
Les processus server
53
Traitement d'une requête d'interrogation
55
Traitement d'une
requête de MAJ
Similaire à une requête d'interrogation pour la
phase d'analyse
Phase d'exécution différente :
1. le processus serveur lit des blocs de données et de
rollback à partir
◼ des fichiers de données
◼ du buffer cache de données
2. Si des blocs ne sont pas déjà dans le cache, copie des
blocs du disque dans le cache
3. Mise à jour de verrou sur les données 56
Traitement d'une requête de MAJ
57
Chapitre 2:Structure d’une Base de données Oracle
58
Architecture - BDD
Base de Données Oracle
❖Structure Physique de stockage
◼ Fichiers de données
◼ fichiers Redo Log
◼ Fichiers de Contrôles
◼ Autres fichiers
❖Structure Logique de stockage
◼ Tablespace
◼ Segment
◼ Extent
◼ Bloc de données
60
Architecture – structure Physique de la BDD
Fichiers de données
61
Architecture – structure Physique de la BDD
62
Présentation du dictionnaire de données
63
Présentation du dictionnaire de données
64
Présentation du dictionnaire de données
65
Présentation du dictionnaire de données
1. Les tables de base sont les tables réelles d'Oracle qui stockent les
informations sur une base de données.
◼ Ces tables sont créées avec le script sql.bsq. Ce script est stocké dans le
répertoire ORACLE_HOME\rdbms\admin. Les informations stockées dans les
tables de base sont lues et écrites par le serveur Oracle. Ces informations sont
rarement accédées directement par les utilisateurs car ces informations sont
normalisées et stockées sous une forme encodée.
◼ Les utilisateurs ou administrateurs de bases de données ne doivent pas utiliser de
commandes LMD, telles que INSERT, UPDATE et DELETE, pour mettre à jour
les tables de base directement, à l'exception de la table de trace d'audit lorsque
la fonctionnalité d'audit est utilisée.
66
Présentation du dictionnaire de données
67
Présentation du dictionnaire de données
68
Présentation du dictionnaire de données
69
Présentation du dictionnaire de données
70
Architecture – structure Physique de la BDD
71
fichiers Redo Log
73
fichiers Redo Log
74
fichiers Redo Log
75
fichiers Redo Log
76
fichiers Redo Log
77
Architecture – structure Physique de la BDD
Fichiers de Contrôles
78
Fichiers de Contrôles
Fichier binaire
Sert pour la base de données
🞑 lors du démarrage normal
◼ A chaque fois qu'une instance monte une base de données, elle lit le fichier
de contrôle pour localiser emplacement des fichiers de données et des
fichiers de reprise
🞑 lors du démarrage après panne
◼ Contient les informations nécessaires à la remise en état de la base de
données
🞑 pour le bon fonctionnement
◼ doit être disponible quand une base de données est montée ou ouverte
79
Fichiers de Contrôles
81
Fichiers de Contrôles
84
Architecture - BDD
Autres fichiers
🞑Fichiers de paramètres
d’initialisation
85
Structure logique de stockage
Objectifs
🞑 Faire le lien entre structure physique et logique
◼ via les fichiers de données
🞑 Comprendre les moyens logiques de structuration
◼ Segment
🞑 Etude de deux segments particuliers
◼ Segment rollback
◼ Segment temporaires
86
Tablespace : Définitions
L’utilisateur, qu’il soit connecté par une application, ou
directement à la BDD par SQL*Plus, ne voit que la structure
logique de la BDD.
🞑 Quand il envoie une requête il voit que les tables et leurs
description
🞑 A aucun moment ne fait appel dans sa commande aux fichiers
physiques
🞑 Le processus serveur qui réceptionne la commande va devoir
savoir dans qu’il fichier sont stockées
🞑 Le relation entre les tables et les données stockées dans le fichier
physique se fait par un objet logique : Le tablespace
87
Tablespace : Définitions
88
Tablespace : Définitions
Tout objet du schéma de base de données est crée
dans un seul tablespace, mais peut s’étaler sur
plusieurs fichiers de données.
Les tablespaces peuvent être activés (online) ou
désactivés (offline) individuellement pour
d’éventuelles opérations de maintenance:
🞑 Les objets d’un tablespace offline ne sont plus
accessibles.
89
Utilisation des Tablespaces
90
Tablespace
92
93
Lien
segments/extents/blocs
Segments
🞑 Espace alloué à un type spécifique de structure logique de stockage dans un tablespace
◼ segments de table, segments d'index, segment temporaire, rollback segment,…
Extents
🞑 Ensemble de blocs contigus.
🞑 Chaque type de segment est composé d'un ou plusieurs extents
Blocs de données
🞑 contient un ou plusieurs blocs de fichier physique alloué à partir d'un fichier de données existant
🞑 plus petite unité d'E/S
🞑 sa taille vaut DB_BLOC_SIZE
94
Segments,Extents& bloc (suite)
95
96
97
Les Tablespaces
Le tablespace System:
🞑 Indispensable au fonctionnement de la base de donnée.
🞑 Il contient les informations du dictionnaire de données, les
définitions des procédures stockées, des packages … .
🞑 Ne devrait pas contenir de données utilisateurs
98
Création d’un tablespace
99
Création d’un tablespace
Syntaxe de création d'un tablespace :
CREATE TABLESPACE nom
DATAFILE spécification_fichier_data [,_]
[MINIMUM EXTENT valeur [K|M]]
[ONLINE|OFFLINE]
[PERMANENT|TEMPORARY]
[LOGGING|NOLOGGING]
[EXTENT MANAGEMENT
DICTIONARY
|LOCAL [AUTOALLOCATE |UNIFORM [SIZE valeur [K|M]]]]
[DEFAULT clause _ storage ]
[BLOCKSIZE valeur [K]]
100
Création d’un tablespace
DATAFILE: spécifie le ou les fichiers de données liés au tablespace. M spécifie la
taille en Mo ou Kbits.
MINIMUM EXTENT: garantit que la taille de chaque extent du tablespace est un
multiple de valeur
LOGGING: option par défaut qui spécifie que toutes les tables, indexes et partitions
dans le tablespace génèrent des infos de redo log.
DEFAULT: définit les paramètres de stockage par défaut pour tous
les objets créés dans le tablespace.
OFFLINE: rend le tablespace indisponible immédiatement après la création.
PERMANENT: spécifie que le tablespace peut être utilisé pour contenir des
objets permanents.
TEMPORARY: cette clause est utilisée pour les objets temporaires.
101
Création d’un tablespace
MANAGEMENT DICTIONARY: le tablespace est géré avec le dictionnaire de données.
MANAGEMENT LOCAL: le tablespace est géré localement et une partie de son espace est
réservée pour sa gestion.
🞑 A la différence des tablespaces standards géré au niveau du dictionnaire de données, la
gestion de l'espace physique (allocation / libération de blocs) se fait dans l'entête du
fichier(s) du tablespace. Une table binaire d'allocation (bitmap) y est maintenue.
🞑 Avantages:
102
Création d’un tablespace
Exemple 1 (tablesapace géré par le dictionnaire de donnée)
103
Création d’un tablespace
Exemple 2
104
Tablespaces temporaires
Tablespaces temporaires
🞑 Utilisé pour les opérations de tri
🞑 Ils ne peuvent pas contenir d’objets permanents
🞑 La gestion local des exents est recommandée
🞑 Exemple :
CREATE TEMPORARY TABLESPACE temp
TEMPFILE ‘/DISK2/temp01.dbf’ SIZE 500M
Extent management local uniform size 4M;
105
Les Undo Tablespaces
106
Augmenter la capacité de stockage
🞑 Augumenter la taille d’un tablespace
◼ Ajouter des fichiers de données au tablespace
ALTER TABLESPACE data ADD DATAFILE
‘d:\oracle\oradata\iges5\data03.dbf' SIZE 200M;
◼ Automatiquement avec l’activation de AUTOEXTEND
ALTER TABLESPACE data
ADD DATAFILE
‘d:\oracle\oradata\iges5\data02.dbf' SIZE 200M AUTOEXTEND ON NEXT
10M MAXSIZE 500M;
🞑 Redimensionner manuellement un fichier de données
ALTER DATABASE
DATAFILE ‘d:\oracle\oradata\iges5\data02.dbf' RESIZE 60M;
107
Statut OFFLINE
Les données d'un tablespace offline ne sont plus
accessibles
🞑 L’administrateur peut sauvegarder cette partie des données sans
arrêter le fonctionnement du reste de la base
🞑 Ne peuvent jamais être mis offline
◼ le tablespace SYSTEM
◼ tout tablespace avec des rollbacks segments actifs
Exemple :
ALTER TABLESPACE data OFFLINE;
108
Chapitre 3: Objets d’une BDD Oracle
109
Les Types de données
110
Les Types de données
Type de données Description
LONG Texte de longueur variable pouvant stocker jusqu'à 2
gigas. On ne pourra mettre qu'une colonne de type LONG
par table.
RAW (taille) Equivalent à VARCHAR2, mais il permet de stocker des
données binaires qui ne sont pas interprétées par Oracle.
La taille maximum est de 2000.
LONGRAW Equivalent à LONG mais pour des données de type
binaire non interprétées par Oracle.
111
Les Types de données
Type de données Description
CLOB Permet de stocker un pointeur vers un fichier de
données composé de caractère et pouvant contenir
jusqu'à 4 gigas.
BLOB Permet de stocker un pointeur vers un fichier
composé de données binaire et pouvant contenir jusqu'à
4 gigas.
BFILE Permet de stocker les données binaires d'un fichier
externe pouvant contenir jusqu'à 4 gigas.
112
Les Types de données
113
Tables
114
Tables
Syntaxe
115
Tables
116
Tables
117
Tables
Attention
🞑 Pour accéder à une table d'un autre utilisateur, il faut précéder le
nom de la table par le nom du propriétaire
◼ Ex: SCOTT.EMP
🞑 La création d'une table fait appel à un ordre du LDD
⇒sa validation est automatique
L'option DEFAULT
🞑 Permet de définir la valeur par défaut
◼ Ex:
– DATE_PRET DATE DEFAULT SYSDATE
– DEPARTEMENT VARCHAR2(25) DEFAULT 'Commercial'
118
Création des tables en utilisant
une sous-requête
Il est possible de créer une table et insérer des
lignes en utilisant la requête CREATE TABLE et
l’option AS sous-requête.
119
Création des tables en utilisant
une sous-requête
Exemple
SQL> CREATE TABLE copy_emp AS SELECT * FROM emp;
120
Création des tables en utilisant
une sous-requête
Exemple
SQL> CREATE TABLE copy_emp NOLOGGING
TABLESPACE DATA2
AS SELECT * FROM emp
WHERE EMPNO<20;
121
Création des tables en utilisant
une sous-requête
ATTENTION
🞑 Le nombre de colonnes spécifiées doit correspondre au nombre des
colonnes de la requête
🞑 La définition d'une colonne ne peut contenir que son nom et sa
valeur par défaut
🞑 Si aucune colonne n'est spécifiée, la table aura les mêmes
colonnes que celles de la requête
🞑 Les contraintes ne sont pas prises en compte
122
Modification des tables
123
Modification des tables
124
Modification des tables
L'ordre ALTER TABLE
125
Modification des tables
126
Modification des tables
127
Modification des tables
L'ordre RENAME
🞑 Permet de modifier le nom d'une table, d'une vue, d'une
séquence, et d'un synonyme
Syntaxe
SQL> RENAME nom_objet TO nouveau_Nom;
Ou
SQL> ALTER TABLE nom_table RENAME
TO nouveau_Nom;
🞑 Vous devez être propriétaire de l'objet
128
Supprimer une table
129
Supprimer une table
130
Vider une table
L'ordre TRUNCATE TABLE
🞑 Permet de vider une table et libérer l'espace de stockage utilisé
par la table
Syntaxe
SQL> TRUNCATE TABLE nom_table;
Cet ordre est irréversible
Vous pouvez utiliser l'ordre DELETE pour supprimer les lignes
d'une table
🞑 Mais il ne libère pas l'espace de stockage
131
Tables
L'ordre COMMENT ON
🞑 Permet d'ajouter des commentaire à une table
Syntaxe
SQL> COMMENT ON [TABLE nom_table| COLUMN
nom_table.nom_colonne]IS 'commentaire';
132
Tables
L'ordre COMMENT ON
133
Tables
L'ordre COMMENT ON
🞑 Pour afficher les commentaire, on peut utiliser
◼ ALL_COL_COMMENTS
◼ USER_COL_COMMENTS
◼ ALL_TAB_COMMENTS
◼ USER_TAB_COMMENTS
134
Tables
Intégrité de données
🞑 Garantit que les données d’une base respectent certaines règles
◼ pour empêcher l’utilisateur d’entrer des données invalides dans la base
🞑 Empêchent la suppression d'une table lorsqu'il existe des
dépendances
135
tables
Toutes les contraintes sont stockées dans le dictionnaire de
données (dans la table USER_CONSTRAINTS ).
🞑 Sont nommées sous Oracle
◼ Automatiquement sous le format SYS_Cn
◼ Manuellement par l'utilisateur
◼ Lors de la création (CREATE TABLE)
◼ Après la création (ALTER TABLE)
🞑 Donner des noms explicites à vos contraintes pour faciliter le
référencement.
Les contraintes peuvent être définies soit au moment de la création
de la table soit après la création.
136
Tables
Typesde contraintesvalides
137
Tables
138
Tables
139
Tables
140
Tables
141
Tables
142
Tables
143
Tables
144
Tables
145
Tables
146
Tables
147
Tables
Désactivation de contraintes
ALTER TABLE Emp
DISABLE CONSTRAINT pk_emp CASCADE;
148
Tables
Activation de contraintes
ALTER TABLE Emp
ENABLE CONSTRAINT pk_emp;
149
Tables
150
Tables
151
Données
152
Données
153
Données
154
Données
155
Données
156
Données
223
157
Données
158
Vues
160
Vues
161
Vues
162
Vues
163
Vues
164
Vues
165
Vues
166
Vues
167
Séquences
168
Séquences
169
Séquences
170
Séquences
171
Séquences
172
Séquences
173
Séquences
174
Séquences
175
Séquences
176
Synonymes
177
Synonymes
178
Synonymes
179
Index
Un index est un objet qui peut augmenter la vitesse
de récupération des lignes en utilisant les pointeurs.
Les index peuvent être créés automatiquement par le
serveur Oracle ou manuellement par l’utilisateur.
Ils sont indépendants donc lorsque vous supprimez
ou modifiez un index les tables ne sont pas
affectées.
180
Index
Lors de la création des clés primaires ou des clés
étrangères, les index sont crées
automatiquement et ils possèdent les même
noms que les contraintes.
181
Index
Quand créer un index:
🞑 La colonne contient une large plage de valeurs.
🞑 La colonne contient plusieurs valeurs nulles.
🞑 Une ou plusieurs colonnes sont fréquemment utilisées dans
la clause WHERE ou pour les conditions de jointure.
🞑 La table est grande et la plupart des requêtes
recherchent moins de 2-4% des lignes.
182
Index
Quand ne pas créer des index:
🞑 La table est petite.
🞑 Les colonnes ne sont pas souvent utilisées.
🞑 Les requêtes recherchent plus de 2-4% des lignes.
🞑 La table est mise à jour fréquemment.
🞑 Les colonnes indexées sont référencées comme une
partie de l’expression.
183
Index
Pour créer un index, il faut utiliser la requête
CREATE INDEX
Exemple :
SQL> CREATE INDEX emp_ename_idx ON
emp(ename);
184
Index
Pour créer un index, il faut utiliser la requête
CREATE INDEX
Exemple :
SQL> CREATE INDEX emp_ename_idx ON
emp(ename);
185
Index
Pour vérifier l’existence d’un index, vous pouvez interroger
la table USER_INDEXES
Supprimer un index
🞑 Il n’est pas possible de modifier un index, il faut le
supprimer ou recréer.
DROP INDEX nomindex;
186
Plan (Partie II)
187
Introduction
Chapitre 1: DÉVELOPPER UN BLOC SIMPLE PL/SQL
Chapitre 2: Traitements Conditionnels et Traitements
Répétitifs
Chapitre 3: Curseurs et Gestion des Erreurs (EXCEPTION)
Chapitre 4: PROCEDURES, FONCTIONS ET PACKAGES
Chapitre 5: Déclencheurs (TRIGGERs)
Oracle - PL / SQL
(Procedural Language / Structured Query
Language)
Pourquoi PL/SQL ?
PL/SQL
REGLES
Traitements séquentiels.
Gestion desexceptions.
Avantages de PL/SQL
Intégration
Amélioration des performances
Portabilité
Développement modulaire
CHAPITRE 1:
DÉVELOPPER UN BLOC
SIMPLE PL/SQL PL
Structure d'un Block PL/SQL
[ DECLARE ]
- Variables, constantes, curseurs,
exceptions utilisateurs
BEGIN
- Ordres SQL
- Instructions de Contrôle PL/SQL [
EXCEPTION ]
- Traitements à effectuer lors d'erreurs
END ;
STRUCRURED’UN
BLOCPL/SQL
BLOC PL/SQL
Identifiants :
🞑 Peuvent contenir jusqu'à 30 caractères.
🞑 Ne peuvent pas contenir de mots réservés à moins qu'ils
soient encadrés de guillemets.
🞑 Doivent commencer par une lettre.
🞑 Doivent avoir un nom distinct de celui d'une table de la base
ou d'une colonne.
Règles Syntaxiques d'un Bloc PL/SQL
DECLARE
table_based_record table_name%ROWTYPE;
DECLARE
r_emp employees%ROWTYPE;
n_emp_id employees.employee_id%TYPE := 200;
BEGIN
SELECT *
INTO r_emp
FROM employees
WHERE employee_id = n_emp_id;
-- print out the employee's first name
DBMS_OUTPUT.PUT_LINE(r_emp.first_name);
END;
/
Les variables - Record
IF statement:
IF condition THEN
sequence_of_statements;
END IF;
IF-THEN-ELSE statement:
IF condition THEN
sequence_of_statements;
ELSE
sequence_of_else_statements;
END IF;
Les structures de contrôle
IF-THEN-ELSIF Statement
IF condition1 THEN
sequence_of_statements1
ELSIF condition2 THEN
sequence_of_statements2
ELSE
sequence_of_statements3
END IF;
Exemple
216
Les structures de contrôle
CASE Statement
CASE [TRUE | selector]
WHEN expression1 THEN
sequence_of_statements1;
WHEN expression2 THEN
sequence_of_statements2;
...
WHEN expressionN THEN
sequence_of_statementsN;
[ELSE sequence_of_statementsN+1;]
END CASE [label_name];
NB :PL / SQL ajoutera la clause ELSE implicite suivante: ELSE RAISE CASE_NOT_FOUND;
Les structures de contrôle
LOOP Statement
LOOP
sequence_of_statements;
END LOOP;
Il doit y avoir au moins une instruction exécutable entre les mots clés LOOP et
END LOOP. La séquence d'instructions est exécutée à plusieurs reprises jusqu'à
atteindre une sortie de boucle. PL / SQL fournit des instructions EXIT et EXIT-
WHEN pour vous permettre de terminer une boucle.
Les structures de contrôle
LOOP Statement
Une boucle peut avoir une étiquette facultative qui est un identifiant non
déclaré entouré par des crochets doubles «étiquette». L'étiquette de la boucle
apparaît au début et à la fin de l'instruction PL / SQL LOOP. Une étiquette de
boucle est utilisée pour qualifier le nom de la variable de compteur de boucle
lorsqu'une boucle est imbriquée dans une autre boucle.
<<label>>
LOOP
sequence_of_statements;
END LOOP label;
Les structures de contrôle
223
Exercice:
SET SERVEROUTPUT ON -- sous SQL pLUS
DECLARE i NUMBER:= 4;
BEGIN
LOOP
IF (MOD(i,3)=0) THEN
DBMS_OUTPUT.PUT_LINE (i || ‘ est un multiple de 3’);
END IF;
IF (MOD(i,4)=0) THEN
DBMS_OUTPUT.PUT_LINE (i || ‘ est un multiple de 4’);
END IF;
IF (MOD(i,5)=0) THEN
DBMS_OUTPUT.PUT_LINE (i || ‘ est un multiple de 5’);
END IF;
i := i+1;
EXIT WHEN i>32;
END LOOP; 224
END;
Les structures de contrôle
Oracle
Exception SQLCODE Description
Error
Il est déclenché lorsqu'une instruction SELECT INTO ne
NO_DATA_FOUND 01403 +100
renvoie aucune ligne.
Non
Oui
DECLARE OPEN FETCH VIDE ? CLOSE
Exemple :
DECLARE
CURSOR c1 IS
SELECT employee_id, last_name
FROM employees;
CURSOR c2 IS
SELECT *
FROM departments
WHERE department_id = 10;
BEGIN
...
Il est important de noter que le nom du curseur n’est pas une variable. Par conséquent, vous ne pouvez pas l’utiliser
comme variable, telle que l’affecter à un autre curseur ou l’utiliser dans une expression.
Ouvrir le curseur
Syntaxe :
OPEN cursor_name;
DECLARE
v_empid employees.employee_id%TYPE;
... v_ename employees.last_name%TYPE;
OPEN i NUMBER := 1;
defined_cursor;
LOOP CURSOR c1 IS
FETCHSELECT employee_id,
defined_cursor INTOlast_name
defined_variables
EXIT FROM employees;
WHEN ...;
BEGIN
...
OPEN
-- c1; the retrieved data
Process
...FOR i IN 1..10 LOOP
END; FETCH c1 INTO v_empid, v_ename;
...
END LOOP;
END ;
Fermer le curseur
Syntaxe :
CLOSE cursor_name;
DECLARE
CURSOR c1 IS
SELECT employee_id, last_name
FROM employees;
BEGIN
FOR emp_record IN c1 LOOP
Syntaxe :
BEGIN SELECT ... COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
statement1;
statement2;
WHEN TOO_MANY_ROWS THEN
statement1;
WHEN OTHERS THEN
statement1;
statement2;
statement3;
END;
Erreur non prédéfinie
Intercepter une violation de contrainte d'intégrité
(code d'erreur du serveur Oracle -2292)
DECLARE
e_products_invalid EXCEPTION; 1 1
PRAGMA EXCEPTION_INIT (
e_products_invalid, -2292); 2 2
v_message VARCHAR2(50);
BEGIN
. . . 3
EXCEPTION
WHEN e_products_invalid THEN
:v_message := 'Product ID specified is not valid.';
. . .
END;
Exception définie par l'utilisateur
Pour intercepter une exception définie par l'utilisateur, vous devez la déclarer et la
déclencher explicitement.
DECLARE
nom_erreur EXCEPTION; 1
. . .
BEGIN
. . .IF (Problème) THEN
RAISE nom_erreur; 2
. . .
EXCEPTION
WHEN nom_erreur THEN 3
(traitement de l’erreur);
. . .
END;
RAISE_APPLICATION_ERROR
Syntaxe :
raise_application_error (error_number,
message[, {TRUE | FALSE}]);
(DECLARE)
RQ : DATATYPE ne peut être que la
définition %TYPE ou %ROWTYPE, ou un BEGIN
type de données explicite sans
EXCEPTION
spécification de taille.
END;
Créer des procédures avec des paramètres
IN OUT IN OUT
Mode par défaut Doit être indiqué Doit être indiqué
La valeur est transmise au Est renvoyé à Est transmis à un sous-
sous-programme l'environnement programme ; est renvoyé à
appelant l'environnement appelant
176 p_id
Par défaut, le paramètre IN est transmis par référence et les paramètres OUT et IN OUT sont transmis
par valeur.
Exemples de paramètres OUT
171 p_id
SMITH p_name
7400 p_salary
0.15 p_comm
Exemples de paramètres OUT
emp_query.sql
CREATE OR REPLACE PROCEDURE query_emp
(p_id IN employees.employee_id%TYPE,
p_name OUT employees.last_name%TYPE,
p_salary OUT employees.salary%TYPE,
p_comm OUT employees.commission_pct%TYPE)
IS
BEGIN
SELECT last_name, salary, commission_pct
INTO p_name, p_salary, p_comm
FROM employees
WHERE employee_id = p_id;
END query_emp;
Visualiser des paramètres OUT
PRINT g_name
RQ :
--N'indiquez pas de taille pour une variable hôte de type NUMBER.
--La longueur par défaut d'une variable de type CHAR ou VARCHAR2 est de 1, si
aucune valeur n'est indiquée entre parenthèses.
Paramètres IN OUT
PRINT g_phone_no
EXECUTE format_phone (:g_phone_no)
PRINT g_phone_no
Méthodes de transmission des paramètres
BEGIN
add_dept; ----????
add_dept ('TRAINING', 2500);
add_dept ( p_loc => 2400, p_name =>'EDUCATION');
add_dept ( p_loc => 1200) ;
END;
…
Déclarer des sous-programmes
leave_emp2.sql
DECLARE
v_id NUMBER := 163;
BEGIN
raise_salary(v_id); --invoke procedure
COMMIT;
...
END;
Appeler une procédure depuis une
autre procédure
Procédure appelée
Procédure appelante PROCEDURE
PROC2 ...
PROCEDURE IS
PROC1 ... ...
IS BEGIN
... ... Exception déclenchée
BEGIN EXCEPTION
... ... Exception traitée
PROC2(arg1); END PROC2;
...
EXCEPTION La procédure
...
END PROC1; appelante reprend
le contrôle
Exceptions non traitées
Procédure appelée
Procédure appelante
PROCEDURE
PROCEDURE PROC2 ...
PROC1 ... IS
IS ...
... BEGIN
BEGIN ... Exception déclenchée
... EXCEPTION
... Exception non traitée
PROC2(arg1); END PROC2;
...
EXCEPTION
...
END PROC1; La section de traitement
des exceptions de la
procédure appelante a
repris le contrôle
Supprimer des procédures
Supprimer une procédure stockée dans la
base de données.
Syntaxe:
DROP PROCEDURE procedure_name
Exemple:
DROP PROCEDURE raise_salary;
Présentation des fonctions stockées
RETURN v_salary
4 PRINT g_salary
Exemple d'appel de fonctions dans des expressions SQL
get_salary.sql
CREATE OR REPLACE FUNCTION get_sal
(p_id IN employees.employee_id%TYPE)
RETURN NUMBER
IS
v_salary employees.salary%TYPE :=0;
BEGIN
SELECT salary
INTO v_salary
FROM employees
WHERE employee_id = p_id;
RETURN v_salary;
END get_sal;
Supprimer des fonctions
Supprimer une fonction stockée.
Syntaxe :
DROP FUNCTION function_name
Exemple:
DROP FUNCTION get_sal;
Procédure Fonction
Paramètre IN Paramètre IN
Environnement Environnement
Paramètre OUT
appelant appelant
Paramètre IN OUT
(DECLARE) (DECLARE)
BEGIN BEGIN
EXCEPTION EXCEPTION
END; END;
Comparer les procédures et les fonctions
Procédures Fonctions
S'exécutent en tant Sont appelées dans une
qu'instruction PL/SQL expression
Ne contiennent pas de Doivent contenir une clause
clause RETURN dans l'en-tête RETURN dans l'en-tête
Peuvent transférer zéro, une Doivent renvoyer une seule
ou plusieurs valeurs valeur
Peuvent contenir une Doivent contenir au moins
instruction RETURN une instruction RETURN
Avantages liés aux procédures et aux
fonctions stockées
❖ Performances améliorées
❖ Facilité de maintenance
❖ Sécurité et intégrité accrues des données
❖ Clarté améliorée du code
Le contrôle de la partie PL/SQL aura lieu le
mardi 28/12/2021 après midi. L’heure et le
local de l’examen seront communiqués
ultérieurement.
280
CHAPITRE 5: Triggers PL/SQL
PL
Types de déclencheur
Un déclencheur :
❑ est une procédure ou un bloc PL/SQL associé à la base de
données, à une table, à une vue ou à un schéma
❑ s'exécute de façon implicite lorsqu'un événement donné se
produit
il peut s'agir d'un :
▪ déclencheur applicatif, qui s'exécute lorsqu'un événement se produit dans une
application donnée
▪ déclencheur de base de données, qui s'exécute lorsqu'un événement de type
données (LMD) ou système (connexion ou arrêt) se produit dans un schéma ou
une base de données
Règles relatives à la conception de
déclencheurs
• Il est conseillé de concevoir des déclencheurs pour :
exécuter des actions associées
centraliser des opérations globales
• Si le code PL/SQL est très long, créer des procédures stockées et les
appeler dans un déclencheur
Application
…
Créer des déclencheurs LMD
RQ
Les déclencheurs sur ligne utilisent des noms de corrélation pour accéder aux
anciennes ou nouvelles valeurs de colonne de la ligne en cours de traitement.
La taille d'un déclencheur est limitée à 32 Ko.
Séquence d'exécution
Action de déclenchement
Déclencheur sur
instruction BEFORE
…
Déclencheur sur ligne BEFORE
Déclencheur sur ligne AFTER
Déclencheur sur instruction
AFTER
Séquence d'exécution
Syntaxe :
Exemple :
CREATE OR REPLACE TRIGGER secure_emp
BEFORE INSERT ON employees
BEGIN
IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN')) OR
(TO_CHAR(SYSDATE,'HH24:MI')
NOT BETWEEN '08:00' AND '18:00')
THEN RAISE_APPLICATION_ERROR (-20500,'You may
insert into EMPLOYEES table only
during business hours.');
END IF;
END;
/
UPDATE employees
SET salary = 15500
WHERE last_name = 'Russell';
Utiliser les qualificatifs OLD et NEW
UPDATE employees
SET salary = 5000, last_name = 'Smith'
WHERE employee_id = 999;
Application
INSERT
TABLE1
Déclencheur
INSTEAD OF
UPDATE
MY_VIEW TABLE2
Créer un déclencheur INSTEAD OF
Syntaxe :
RQ : Les déclencheurs INSTEAD OF ne peuvent être écrits que pour des vues. Les options
BEFORE et AFTER ne sont pas valides.
Créer un déclencheur INSTEAD OF Exemple
END;
Créer un déclencheur INSTEAD OF
…
…
Différences entre les déclencheurs de base de données et les
procédures stockées
Déclencheurs Procédures
BEFORE
…
INSERT
ligne
Gérer les déclencheurs