Vous êtes sur la page 1sur 14

Les TP Informatiques_v8_Mise en page 1 05/06/2014 14:30 Page 19

Oracle 12c - Programmez avec SQL et PL/SQL


Oracle 12c
Programmez
Oracle 12c - Programmez avec SQL et PL/SQL Ingnieur en Informatique pour
l'Industrie, consultant, Jrme
Conu et crit par des formateurs, ce livre sur Oracle 12c est destin GABILLAUD est galement res-
un public de lecteurs dbutants initis possdant dj quelques ponsable pdagogique dans un
grand centre de formation infor-
bases sur le langage SQL.
matique. Spcialiste des systmes

avecSQLetPL/SQL
Les premiers chapitres constituent un apprentissage progressif per- d'accs aux donnes Microsoft ou
mettant au lecteur d'acqurir de solides comptences et de gagner en Oracle, il est dj auteur de nom-
autonomie sur la mise en uvre d'une base de donnes Oracle et la breux ouvrages sur ce sujet, re-
programmation laide du langage PL/SQL. Les exercices proposs connus pour leurs qualits
techniques et pdagogiques.
vous permettront de vous entraner sur SQL DLL, le langage de dfi-
nition de donnes (crer des tables, des vues, ajouter des colonnes, Aprs des tudes scientifiques

Exercices et corrigs
des colonnes calcules, des colonnes invisibles, rcuprer des tables Anne-Sophie LACROIX a travaill
aprs leur suppression, mettre en place des contraintes dintgrit, en SSII pendant quelques annes
et notamment sous Oracle. Elle est
crer des index), sur SQL DML, le langage de manipulation des don- aujourdhui formatrice et donne r-
nes sur les lments avancs du SQL (ajouter des enregistrements, gulirement les cours SQL, PL/SQL
crire des requtes simples, des requtes complexes avec tous les et Administration de Bases de don-
types de jointures, des calculs lmentaires, des calculs dagrgat, nes, un public dinformaticiens
des sous-requtes) et sur PL/SQL (crire des blocs, utiliser des cur- dbutants. Sa connaissance appro-
fondie des besoins de l'entreprise
seurs, grer les exceptions, travailler avec les transactions, crer des et ses qualits pdagogiques ren-
procdures, des fonctions et des dclencheurs...). Le dernier chapitre dent cet ouvrage particulirement
propose un TP rcapitulatif. adapt l'apprentissage et la mise
Les auteurs, au travers des questions de pr-requis et des exercices en pratique de la programmation
dune base de donnes.
90 QCM
proposs se sont efforcs de mettre en avant les piges viter lors
de l'criture de scripts.
Tlchargement
www.editions-eni.fr
93 travaux pratiques et leurs corrigs
Des lments complmentaires sont en tlchargement sur le site
www.editions-eni.fr.
ISSN 1765-7334
Prs de 28 H de mise en pratique
ISBN : 978-2-7460-8930-3
Plus
dinformations:
Les chapitres du livre
Avant-propos LeTlchargement
langage de dfinition de donnes
9 782746 089303
Jrme GABILLAUD
www.editions-eni.fr
SQL DML SQL avanc PL/SQL Blocs et curseurs

27 H
PL/SQL Procdures et fonction Dclencheurs de
bases de donnes TP gnral Annexes Anne-Sophie LACROIX
Sur www.editions-eni.fr :
b Les scripts de correction
de tous les exercices proposs.
Avant-propos
Objectif de ce livre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Comment utiliser ce livre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Conventions d'criture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

noncs
Chapitre 1 : Le langage de dfinition de donnes
Pr-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
nonc 1.1 Cration de tables : le dictionnaire de donnes . . . . . . . . . . . . . . . . . . . . 15
nonc 1.2 Mise en place des tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
nonc 1.3 Cration d'une squence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
nonc 1.4 Ajout de contraintes d'intgrit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
nonc 1.5 Modification de table : ajout d'une colonne . . . . . . . . . . . . . . . . . . . . . . . 19
nonc 1.6 Suppression d'une colonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
nonc 1.7 Cration d'un index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
nonc 1.8 Modification d'une contrainte d'intgrit . . . . . . . . . . . . . . . . . . . . . . . . . 20
nonc 1.9 Attribution d'une valeur par dfaut une colonne. . . . . . . . . . . . . . . . . . . 20
nonc 1.10 Dfinition d'un synonyme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
nonc 1.11 Modification du nom d'une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Chapitre 2 : SQL DML


Pr-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
nonc 2.1 Ajout d'informations dans une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
nonc 2.2 Utilisation d'une squence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
nonc 2.3 Excution d'un script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
nonc 2.4 Extraction simple d'informations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
nonc 2.5 Activation de l'historique des mouvements . . . . . . . . . . . . . . . . . . . . . . . 30
nonc 2.6 Ajout d'une colonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
nonc 2.7 Mise jour conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
nonc 2.8 Suppression de lignes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
nonc 2.9 Extraction simple : catalogue gnral des livres . . . . . . . . . . . . . . . . . . . . 32
nonc 2.10 Extraction simple : tableau de bord des emprunts . . . . . . . . . . . . . . . . . . 32
nonc 2.11 Extraction avec calcul : nombre d'ouvrages dans chaque catgorie. . . . . . . 33
nonc 2.12 Extraction avec calcul d'agrgat :
calcul de la dure moyenne d'un emprunt . . . . . . . . . . . . . . . . . . . . . . . . 33
nonc 2.13 Extraction avec calcul d'agrgat : dure moyenne
de l'emprunt en fonction du genre du livre. . . . . . . . . . . . . . . . . . . . . . . . 34
nonc 2.14 Restriction sur un calcul d'agrgat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
nonc 2.15 Jointure externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
nonc 2.16 Cration de vue - Calculer le nombre d'emprunts pour chaque membre . . . 35
nonc 2.17 Cration de vue - Calculer le nombre d'emprunts par ouvrage . . . . . . . . . . 36
nonc 2.18 Le tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
nonc 2.19 Cration d'une table temporaire globale . . . . . . . . . . . . . . . . . . . . . . . . . 37
nonc 2.20 Extraction complexe : mise en place d'un tableau de bord . . . . . . . . . . . . 38
nonc 2.21 Extraction simple : tablir la liste des livres . . . . . . . . . . . . . . . . . . . . . . 39

Chapitre 3 : SQL avanc


Pr-requis .................................................... 41
nonc 3.1 Calcul d'agrgat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
nonc 3.2 Sous-requte corrle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
nonc 3.3 Sous-requte imbrique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
nonc 3.4 Recherche sur un critre exprim sous forme de chane de caractres . . . . 45
nonc 3.5 Les expressions rgulires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
nonc 3.6 Affichage dtaill des libells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
nonc 3.7 Dfinition de commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
nonc 3.8 Interrogation des commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
nonc 3.9 Optimisation d'une contrainte d'intgrit. . . . . . . . . . . . . . . . . . . . . . . . . 49
nonc 3.10 Validation diffre d'une contrainte d'intgrit . . . . . . . . . . . . . . . . . . . . . 49
nonc 3.11 Suppression d'une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
nonc 3.12 Restauration d'une table supprime. . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
nonc 3.13 Message affich en fonction du rsultat d'un calcul . . . . . . . . . . . . . . . . . 50
nonc 3.14 Tableau rcapitulatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
nonc 3.15 Colonne virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

Chapitre 4 : PL/SQL Blocs et curseurs


Pr-requis .................................................... 55
nonc 4.1 Mise jour conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
nonc 4.2 Suppression conditionnelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
nonc 4.3 Affichage d'informations pendant l'excution d'un bloc . . . . . . . . . . . . . . . 60
nonc 4.4 Affichage d'informations et curseurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
nonc 4.5 Informations extraites suivant une condition complexe. . . . . . . . . . . . . . . 61
nonc 4.6 Mise jour conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
nonc 4.7 Modification d'une contrainte en fonction du rsultat d'un calcul . . . . . . . . 63
nonc 4.8 Informations supprimes en fonction du rsultat d'une extraction . . . . . . . 64
nonc 4.9 Champ format. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
nonc 4.10 Curseur paramtr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

2
Chapitre 5 : PL/SQL Procdures et fonctions
Pr-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
nonc 5.1 Calcul de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
nonc 5.2 Fonction de comparaison de donnes de type date . . . . . . . . . . . . . . . . . 70
nonc 5.3 Procdure pour automatiser un traitement . . . . . . . . . . . . . . . . . . . . . . . 71
nonc 5.4 Procdure de suppression conditionnelle. . . . . . . . . . . . . . . . . . . . . . . . . 71
nonc 5.5 Fonction pour extraire une ligne d'information . . . . . . . . . . . . . . . . . . . . . 72
nonc 5.6 Fonction pour encapsuler un calcul d'agrgat . . . . . . . . . . . . . . . . . . . . . 73
nonc 5.7 Fonction munie de plusieurs paramtres. . . . . . . . . . . . . . . . . . . . . . . . . 73
nonc 5.8 Planification d'une procdure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
nonc 5.9 Squence utilise depuis une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . 75
nonc 5.10 Message d'erreur personnalis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
nonc 5.11 Procdure d'insertion multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
nonc 5.12 Comportement diffrent en fonction du contexte . . . . . . . . . . . . . . . . . . . 77
nonc 5.13 Cration d'un package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
nonc 5.14 Fonction renvoyant plusieurs valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

Chapitre 6 : Dclencheurs de bases de donnes


Pr-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
nonc 6.1 Contrle de l'ajout d'informations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
nonc 6.2 Dfinition d'un lien non transfrable :
un emprunt est toujours li au mme membre. . . . . . . . . . . . . . . . . . . . . 85
nonc 6.3 Lien non transfrable : entre dtails et exemplaires . . . . . . . . . . . . . . . . . 86
nonc 6.4 Modification automatique de la valeur
d'une colonne en fonction d'une autre colonne . . . . . . . . . . . . . . . . . . . . . 87
nonc 6.5 Prise en compte des informations avant leur suppression . . . . . . . . . . . . . 88
nonc 6.6 Optimisation du suivi des oprations . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
nonc 6.7 Analyse du suivi des oprations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
nonc 6.8 Modification automatique de l'tat d'une colonne
suite la mise jour d'informations d'une autre table. . . . . . . . . . . . . . . . 91
nonc 6.9 Verrouiller des enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
nonc 6.10 Suppression cohrente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
nonc 6.11 Dclencheur de synthse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
nonc 6.12 Grer l'volution vers les ISBN 13 chiffres et le code EAN 13 . . . . . . . . . 93

Chapitre 7 : TP gnral
nonc 7.1 Construction des tables . ....... ....... ....... ........ . . . . . . 95
nonc 7.2 Modification de structure ....... ....... ....... ........ . . . . . . 96
nonc 7.3 Ajout des informations . . ....... ....... ....... ........ . . . . . . 97
nonc 7.4 Extraction simple . . . . . . ....... ....... ....... ........ . . . . . . 97
3
nonc 7.5 Calculs simples. . . . . . . . . . . . . . . . . . . ........ ....... ....... . 97
nonc 7.6 Calculs d'agrgat. . . . . . . . . . . . . . . . . . ........ ....... ....... . 97
nonc 7.7 Cration de vues . . . . . . . . . . . . . . . . . . ........ ....... ....... . 98
nonc 7.8 Procdure . . . . . . . . . . . . . . . . . . . . . . ........ ....... ....... . 98
nonc 7.9 Fonctions . . . . . . . . . . . . . . . . . . . . . . . ........ ....... ....... . 99
nonc 7.10 Dclencheurs de base de donnes. . . . . . ........ ....... ....... . 99

Corrigs
Chapitre 1 : Le langage de dfinition de donnes
Pr-requis ................................................... 101
Corrig 1.1 Cration de tables : le dictionnaire de donnes . . . . . . . . . . . . . . . . . . . 104
Corrig 1.2 Mise en place des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Corrig 1.3 Cration d'une squence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Corrig 1.4 Ajout de contraintes d'intgrit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Corrig 1.5 Modification de table : ajout d'une colonne . . . . . . . . . . . . . . . . . . . . . 108
Corrig 1.6 Suppression d'une colonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Corrig 1.7 Cration d'un index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Corrig 1.8 Modification d'une contrainte d'intgrit . . . . . . . . . . . . . . . . . . . . . . . . 109
Corrig 1.9 Attribution d'une valeur par dfaut une colonne . . . . . . . . . . . . . . . . . 110
Corrig 1.10 Dfinition d'un synonyme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Corrig 1.11 Modification du nom d'une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

Chapitre 2 : SQL DML


Pr-requis ................................................... 111
Corrig 2.1 Ajout d'informations dans une table. . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Corrig 2.2 Utilisation d'une squence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Corrig 2.3 Excution d'un script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Corrig 2.4 Extraction simple d'informations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Corrig 2.5 Activation de l'historique des mouvements . . . . . . . . . . . . . . . . . . . . . . 116
Corrig 2.6 Ajout d'une colonne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Corrig 2.7 Mise jour conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Corrig 2.8 Suppression de lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Corrig 2.9 Extraction simple : catalogue gnral des livres . . . . . . . . . . . . . . . . . . 119
Corrig 2.10 Extraction simple : tableau de bord des emprunts . . . . . . . . . . . . . . . . . 119
Corrig 2.11 Extraction avec calcul : nombre d'ouvrages dans chaque catgorie . . . . . 119
Corrig 2.12 Extraction avec calcul d'agrgat :
calcul de la dure moyenne d'un emprunt . . . . . . . . . . . . . . . . . . . . . . 120
Corrig 2.13 Extraction avec calcul d'agrgat : dure moyenne
de l'emprunt en fonction du genre du livre . . . . . . . . . . . . . . . . . . . . . . 120
Corrig 2.14 Restriction sur un calcul d'agrgat. . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
4
Corrig 2.15 Jointure externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Corrig 2.16 Cration de vue - Calculer le nombre d'emprunts pour chaque membre . . 121
Corrig 2.17 Cration de vue - Calculer le nombre d'emprunts par ouvrage . . . . . . . . . 122
Corrig 2.18 Le tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Corrig 2.19 Cration d'une table temporaire globale . . . . . . . . . . . . . . . . . . . . . . . . 122
Corrig 2.20 Extraction complexe : mise en place d'un tableau de bord. . . . . . . . . . . . 123
Corrig 2.21 Extraction simple : tablir la liste des livres . . . . . . . . . . . . . . . . . . . . . . 125

Chapitre 3 : SQL avanc


Pr-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Corrig 3.1 Calcul d'agrgat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Corrig 3.2 Sous-requte corrle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Corrig 3.3 Sous-requte imbrique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Corrig 3.4 Recherche sur un critre exprim sous forme de chane de caractres . . . 130
Corrig 3.5 Les expressions rgulires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Corrig 3.6 Affichage dtaill des libells. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Corrig 3.7 Dfinition de commentaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Corrig 3.8 Interrogation des commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Corrig 3.9 Optimisation d'une contrainte d'intgrit . . . . . . . . . . . . . . . . . . . . . . . . 132
Corrig 3.10 Validation diffre d'une contrainte d'intgrit . . . . . . . . . . . . . . . . . . . . 133
Corrig 3.11 Suppression d'une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Corrig 3.12 Restauration d'une table supprime . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Corrig 3.13 Message affich en fonction du rsultat d'un calcul . . . . . . . . . . . . . . . . 134
Corrig 3.14 Tableau rcapitulatif. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Corrig 3.15 Colonne virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

Chapitre 4 : PL/SQL Blocs et curseurs


Pr-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Corrig 4.1 Mise jour conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Corrig 4.2 Suppression conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Corrig 4.3 Affichage d'informations pendant l'excution d'un bloc . . . . . . . . . . . . . . 142
Corrig 4.4 Affichage d'informations et curseurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Corrig 4.5 Informations extraites suivant une condition complexe . . . . . . . . . . . . . . 144
Corrig 4.6 Mise jour conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Corrig 4.7 Modification d'une contrainte en fonction du rsultat d'un calcul . . . . . . . 147
Corrig 4.8 Informations supprimes en fonction du rsultat d'une extraction . . . . . . . 148
Corrig 4.9 Champ format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Corrig 4.10 Curseur paramtr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

5
Chapitre 5 : PL/SQL Procdures et fonctions
Pr-requis ................................................... 151
Corrig 5.1 Calcul de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Corrig 5.2 Fonction de comparaison de donnes de type date . . . . . . . . . . . . . . . . 152
Corrig 5.3 Procdure pour automatiser un traitement . . . . . . . . . . . . . . . . . . . . . . 153
Corrig 5.4 Procdure de suppression conditionnelle . . . . . . . . . . . . . . . . . . . . . . . 153
Corrig 5.5 Fonction pour extraire une ligne d'information. . . . . . . . . . . . . . . . . . . . 154
Corrig 5.6 Fonction pour encapsuler un calcul d'agrgat . . . . . . . . . . . . . . . . . . . . 155
Corrig 5.7 Fonction munie de plusieurs paramtres . . . . . . . . . . . . . . . . . . . . . . . 156
Corrig 5.8 Planification d'une procdure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Corrig 5.9 Squence utilise depuis une fonction . . . . . . . . . . . . . . . . . . . . . . . . . 158
Corrig 5.10 Message d'erreur personnalis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Corrig 5.11 Procdure d'insertion multiple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Corrig 5.12 Comportement diffrent en fonction du contexte . . . . . . . . . . . . . . . . . . 160
Corrig 5.13 Cration d'un package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Corrig 5.14 Fonction renvoyant plusieurs valeurs . . . . . . . . . . . . . . . . . . . . . . . . . . 166

Chapitre 6 : Dclencheurs de bases de donnes


Pr-requis ................................................... 167
Corrig 6.1 Contrle de l'ajout d'informations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Corrig 6.2 Dfinition d'un lien non transfrable :
un emprunt est toujours li au mme membre . . . . . . . . . . . . . . . . . . . 170
Corrig 6.3 Lien non transfrable : entre dtails et exemplaires . . . . . . . . . . . . . . . . 170
Corrig 6.4 Modification automatique de la valeur
d'une colonne en fonction d'une autre colonne . . . . . . . . . . . . . . . . . . . 171
Corrig 6.5 Prise en compte des informations avant leur suppression . . . . . . . . . . . . 172
Corrig 6.6 Optimisation du suivi des oprations . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Corrig 6.7 Analyse du suivi des oprations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Corrig 6.8 Modification automatique de l'tat d'une colonne
suite la mise jour d'informations d'une autre table . . . . . . . . . . . . . . 176
Corrig 6.9 Verrouiller des enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Corrig 6.10 Suppression cohrente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Corrig 6.11 Dclencheur de synthse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Corrig 6.12 Grer l'volution vers les ISBN 13 chiffres et le code EAN 13 . . . . . . . 184

6
Chapitre 7 : TP gnral
Corrig 7.1 Construction des tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Corrig 7.2 Modification de structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Corrig 7.3 Ajout des informations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Corrig 7.4 Extraction simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Corrig 7.5 Calculs simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Corrig 7.6 Calculs d'agrgat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Corrig 7.7 Cration de vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Corrig 7.8 Procdure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Corrig 7.9 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Corrig 7.10 Dclencheurs de base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

Annexes
Annexe 1 : Structure de la base aprs le chapitre 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Annexe 2 : Travailler avec Oracle
Connatre le rpertoire d'installation d'Oracle . . . . . . . . . . . . . . . . . . . . . . . . 203
Modifier le fichier de configuration tnsnames.ora . . . . . . . . . . . . . . . . . . . . . 203
Annexe 3 : Travailler avec une transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

7
PL/SQL Blocs et curseurs
nonc Chapitre 4

Chapitre 4
PL/SQL Blocs et curseurs

O r a cl e 1 2 c

Dure : 3 heures 55
Mots cls
DECLARE, BEGIN, END, LOOP, FOR, WHILE, IF, CASE, CURSOR, FORALL, EXCEPTION,
SUBTYPE, DBMS_OUTPUT
Objectif
Ce chapitre est consacr la mise en pratique des premiers concepts du langage PL/SQL, c'est-
-dire bien comprendre la structure de bloc PL/SQL, le fonctionnement des curseurs, la
dclaration de variable, les tableaux et les exceptions.
Une mise en pratique du package DBMS_OUTPUT est galement prsente. Ce package est
particulirement utile pour suivre la progression des traitements dans un bloc PL/SQL.

Pr-requis
Pour valider les pr-requis ncessaires, avant d'aborder le TP, rpondez aux questions ci-
dessous :

1. Quels sont les quatre mots cls utiliss pour structurer un bloc PL/SQL ?
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
2. Quelles instructions sont possibles dans un bloc PL/SQL ?
a. SELECT
b. INSERT, UPDATE, DELETE
c. COMMIT, ROLLBACK
d. CREATE, ALTER, DROP

55
Oracle 12c - Programmez avec SQL et PL/SQL
Les TP Informatiques

3. Quel est l'avantage de passer par un bloc PL/SQL plutt que de choisir la solution pure-
ment SQL lors de l'excution de plusieurs instructions du DML (INSERT, UPDATE et
DELETE) ?
a. L'excution est plus rapide.
b. C'est la mme chose.
c. Les exceptions peuvent tre traites.
d. Il n'y a alors pas besoin de grer les transactions.
4. Quelles dclarations de variables ne sont pas valides ?
a. c varchar2(10);
b. 12 int;
c. entier number(2);
d. tableau entier;
5. Quelle dclaration permet de dfinir une variable structure comme la table des clients ?
a. Client clients%type;
b. Client clients%rowtype;
c. Client clients;
6. La dclaration suivante est-elle possible ? Justifiez votre rponse.
phrase varchar2(5000)
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
7. Comment est-il possible de dfinir notre type entier comme tant un number(10) ?
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
8. Comment est-il possible de dfinir une variable structure compose des champs numero
number(10) et nom varchar(40) ?
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________

56
PL/SQL Blocs et curseurs
nonc Chapitre 4

9. Le langage PL/SQL est-il sensible la casse ?


____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
10. Quelle structure de boucle n'est pas valide ?
a. LOOP ... END LOOP;
b. FOR i IN 1..10 LOOP ... END LOOP;
c. WHILE (i<10) LOOP ... END LOOP;
d. LOOP ... WHILE(i<10);
11. Quel attribut du curseur est utilis pour savoir si la dernire excution de l'instruction
FETCH a permis de ramener une ligne d'information ?
a. %FOUND
b. %NOTFOUND
c. %ISOPEN
d. %ROWCOUNT
12. Comment est-il possible de dclarer un curseur qui accepte des paramtres ?
a. Ce n'est pas possible.
b. Il faut faire prcder le nom de la variable par le caractre &.
c. Il faut dclarer les paramtres avant le curseur en tant que CURSOR PARAMETER.
d. Il faut dclarer le curseur de la faon suivante :
CURSOR leCurseur(param1 type,...) IS...
13. Quelle plage de numros est rserve aux erreurs dfinies par le programmeur ?
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
14. Quelle est l'instruction qui permet de lever une exception ?
a. raise
b. raise_error
c. raise_exception
d. exception

57
Oracle 12c - Programmez avec SQL et PL/SQL
Les TP Informatiques

15. Comment est-il possible de reprendre le droulement classique du bloc aprs qu'une
exception a t leve et traite ?
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________

Corrig p. 137

nonc 4.1 Mise jour conditionnelle


Dure estimative : 25 minutes
Tous les exemplaires ont t enregistrs avec l'tat neuf. Cependant, au fur et mesure des
emprunts, leur tat s'est dgrad. Il est donc ncessaire d'ajuster la valeur de cet tat en
prenant en considration le nombre de fois o l'exemplaire a t emprunt. C'est en effet le
nombre d'emprunteurs qui a plus d'incidence sur l'tat gnral de l'exemplaire que la dure
effective des emprunts.
La mise jour des informations est donc effectue l'aide du tableau suivant :
Nombre d'emprunts tat
Moins de 10 neuf
De 11 25 bon
De 26 40 moyen
Plus de 41 mauvais

Pour la ralisation de ce premier script, nous considrons que tous les exemplaires sont achets
l'tat neuf et que l'ensemble des emprunts de tous les exemplaires sont conservs en ligne.
Exemple de l'tat des exemplaires avant l'excution du bloc PL/SQL :

58
PL/SQL Blocs et curseurs
nonc Chapitre 4
la suite de l'excution du bloc, la mme requte permet d'obtenir le rsultat suivant :

Corrig p. 139

nonc 4.2 Suppression conditionnelle


Dure estimative : 30 minutes
crivez un bloc PL/SQL qui permet de supprimer les membres dont l'adhsion a expir depuis
plus de 2 ans.
Si des fiches d'emprunts existent et si tous les exemplaires emprunts ont t rendus, alors il
faut mettre null la valeur prsente dans la colonne membre.
S'il reste des livres emprunts et non rendus, alors il ne faut pas supprimer le membre.
Par exemple, la liste des membres dont l'adhsion a expir depuis plus de 2 ans donne le
rsultat suivant :

59
Oracle 12c - Programmez avec SQL et PL/SQL
Les TP Informatiques

Aprs l'excution du bloc PL/SQL, la mme requte ne doit ramener aucune ligne.
Pour les besoins de l'exercice, ajoutez un membre non actif depuis plus de 2 ans par l'interm-
diaire de l'instruction suivante :
INSERT INTO membres (numero, nom, prenom, adresse, adhesion, duree)
VALUES (seq_membre.NEXTVAL, 'LOMOBO', 'Laurent', '31 rue des
lilas',sysdate-1000,1);
Indice
Apportez les modifications de structure ncessaires avant de raliser le script.

Corrig p.141

nonc 4.3 Affichage d'informations


pendant l'excution d'un bloc
Dure estimative : 30 minutes
crivez un bloc PL/SQL qui permet d'diter la liste des trois membres qui ont emprunt le plus
d'ouvrages au cours des dix derniers mois et tablissez galement la liste des trois membres
qui en ont emprunt le moins.

Pour ce type de calcul, l'exemplaire d'un ouvrage est considr comme emprunt par l'un des
membres partir du moment o il est inscrit sur la fiche. C'est donc la date figurant dans la
table des emprunts qui fait rfrence pour l'ensemble des calculs.

60