PL/SQL
Présenté par Abdoul Aziz Ciss
Dept GIT – EPT
Email: aaciss@[Link]
1 PL/SQL -- AA Ciss
Contenu
Introduction au PL/SQL
Variables PL/SQL
Créer des sections exécutables
Interactions avec le serveur Oracle
Structures de contrôle
Types de données composites
Curseurs explicites
Gestion des exceptions
Procédures et fonctions stockées
2 PL/SQL -- AA Ciss
Objectifs du cours
A la fin de ce cours, vous pourrez :
1. décrire les extensions de programmation du langage SQL offertes
par le langage PL/SQL
2. écrire du code PL/SQL permettant l’interaction avec une base de
données
3. concevoir des programmes PL/SQL qui s’exécutent de façon
efficace
4. utiliser des structures de programmation PL/SQL et des
instructions de contrôle conditionnelles
5. traiter les erreurs d’exécution
6. décrire les procédures et fonctions stockées
3 PL/SQL -- AA Ciss
Introduction au langage PL/SQL
4 PL/SQL -- AA Ciss
Objectifs du chapitre
A la fin de ce chapitre, vous pourrez :
expliquer la nécessité du langage PL/SQL
présenter les avantages liés à l'utilisation du langage PL/SQL
identifier les différents types de bloc PL/SQL
utiliser SQLDeveloper comme IDE pour le langage PL/SQL
afficher des messages en langage PL/SQL
5 PL/SQL -- AA Ciss
Définition du langage PL/SQL
Le langage PL/SQL
Signifie : Procedural Language extension to SQL (extension
procédurale du langage SQL)
Est le langage standard d’accès aux données d’Oracle Corporation
pour les bases de données relationnelles
Intègre de manière transparente les structures procédurales au SQL
6 PL/SQL -- AA Ciss
A propos du langage PL/SQL
Le langage PL/SQL
offre une structure de bloc pour les unités de codes exécutables. La
maintenance du code est facilitée par une structure bien définie
Fournit des structures procédurales telles que :
Variables, constantes et types
Structures de contrôles telles que les instructions conditionnelles et les
boucles
Programmes réutilisables écrits une fois et exécutés plusieurs fois
7 PL/SQL -- AA Ciss
Environnement PL/SQL
8 PL/SQL -- AA Ciss
Avantages liés à l’utilisation de PL/SQL
Intégration de structures procédurales au SQL
Performances améliorées
9 PL/SQL -- AA Ciss
Avantages liés à l’utilisation de PL/SQL
Développement de programmes modulaires
Intégration aux outils Oracle
Portabilité
Traitement des exceptions
10 PL/SQL -- AA Ciss
Structure d’un bloc PL/SQL
DECLARE (facultatif)
Variables, curseurs, exceptions définies
par l’utilisateur
BEGIN (obligatoire)
- Instructions SQL
- Instructions PL/SQL
Exception (facultatif)
Actions à effectuer
lorsque des erreurs se
produisent
END; (obligatoire)
11 PL/SQL -- AA Ciss
Types de bloc
12 PL/SQL -- AA Ciss
Structures de programme
13 PL/SQL -- AA Ciss
Environnement de programmation PL/SQL
14 PL/SQL -- AA Ciss
Déclaration de variables
15 PL/SQL -- AA Ciss
Objectifs du chapitre
A la fin de ce chapitre, vous pourrez
identifier les identificateurs valides et non valides
Répertorier les utilisations des variables
Déclarer et initialiser des variables
Répertorier et décrire les différents types de données
Identifier les avantages liés à l’utilisation de l’attribut %TYPE
Déclarer, utiliser et afficher des variables attachées
16 PL/SQL -- AA Ciss
Utilisation des variables
Les variables peuvent être utilisées pour
le stockage temporaire de données
La manipulation de valeurs stockées
La réutilisation
17 PL/SQL -- AA Ciss
Identificateurs
Les identificateurs sont utilisés pour
nommer les variables
définir une convention pour les noms de variables
Les noms
doivent commencer par une lettre
Peuvent inclure des lettres ou des chiffres
Peuvent inclure des caractères spéciaux tels que les signe $, _ ou #
Doivent présenter une longueur maximale de 30 caractères
Ne doivent pas être des mots réservés
18 PL/SQL -- AA Ciss
Traitements des variables
Les variables
sont déclarées et initialisées dans la section déclarative
sont utilisées et font l’objet d’affectation de nouvelles valeurs dans la
section exécutable
sont transmis en tant que paramètres aux sous-programmes PL/SQL
sont utilisées pour contenir la sortie d’un sous-programme PL/SQL
19 PL/SQL -- AA Ciss
Déclaration et initialisation des variables
Syntaxe
Exemple
20 PL/SQL -- AA Ciss
Déclaration et initialisation des variables
21 PL/SQL -- AA Ciss
Délimiteurs dans les littéraux de type chaîne
22 PL/SQL -- AA Ciss
Types de variables
Variables PL/SQL
Scalaires
Composites
Références
Lob
Variables non PL/SQL : variables attachées
23 PL/SQL -- AA Ciss
Types de variables
24 PL/SQL -- AA Ciss
Règles de déclaration et d'initialisation
des variables PL/SQL
Respecter les conventions de notations
Utiliser des noms évocateurs pour les variables
Initialiser les variables désignées comme NOT NULL et
CONSTANT
Initialiser les variables avec l’opérateur d’affectation (:=) ou le mot
clé DEFAULT
Déclarer un identificateur par ligne pour améliorer la lisibilité et
faciliter la maintenance du code
25 PL/SQL -- AA Ciss
Règles de déclaration et d'initialisation
des variables PL/SQL
Eviter d’utiliser des noms de colonnes comme identificateurs
Utiliser la contrainte NOT NULL lorsque la variable doit contenir une valeur
26 PL/SQL -- AA Ciss
Types de données scalaires
Ils contiennent une valeur unique
Ils n’ont pas de composants internes
27 PL/SQL -- AA Ciss
Types de données scalaires
CHAR [(maximum_length)]
VARCHAR2 (maximum_length) BINARY_FLOAT
LONG BINARY_DOUBLE
LONG RAW BINARY_INTEGER
NUMBER [(precision, PLS_INTEGER
scale)]
DATE
BOOLEAN
TIMESTAMP
TIMESTAMP WITH TIME ZONE
TIMESTAMP WITH LOCAL TIME ZONE
INTERVAL YEAR TO MONTH
INTERVAL DAY TO SECOND
28 PL/SQL -- AA Ciss
BINARY_FLOAT et BINARY_DOUBLE
Représentent les nombres en virgule flottante au format IEEE
(Institute of Electrical and Electronics Engineers) 754
Offre une meilleure opérabilité et un fonctionnement rapide
Permettent de stocker des valeurs au-delà des valeurs pouvant être
stockées avec le type de données NUMBER
Offrent l’avantage des opérations arithmétiques fermées et l’arrondi
transparent
29 PL/SQL -- AA Ciss
Déclaration des variables scalaires
Exemples
30 PL/SQL -- AA Ciss
Attribut %TYPE
L’attribut %TYPE
est utilisé pour déclarer une variable en fonction
d’une définition de colonne de base de données
d’une autre variable déclarée
est préfixé avec
la table et la colonne de la base de données
le nom de la variable déclarée
31 PL/SQL -- AA Ciss
Déclarer des variables avec l’attribut
%TYPE
Syntaxe
Exemples
32 PL/SQL -- AA Ciss
Déclarer des variables booléennes
Seules les valeurs TRUE, FALSE et NULL peuvent être affectées à
une variable booléenne
Les expressions conditionnelles utilisent les opérateurs logiques AND
et OR, ainsi que l’opérateur NOT, pour vérifier les valeurs des
variables
Les variables renvoient toujours TRUE, FALSE ou NULL
Des expressions arithmétiques, caractères, ou dates peuvent être
utilisées pour renvoyer une valeur booléenne
33 PL/SQL -- AA Ciss
Variables attachées
Les variables attachées sont
créées dans l’environnement
Également appelées variables hôte
Créées avec le mot clé VARIABLE
Utilisées dans les instructions SQL et les blocs PL/SQL
Accessibles même après l’exécution du bloc PL/SQL
Référencées avec un signe deux-points précédant la variable
34 PL/SQL -- AA Ciss
Afficher des variables attachées
Exemple
35 PL/SQL -- AA Ciss
Afficher des variables attachées
Exemple
36 PL/SQL -- AA Ciss
Variables de substitution
Elles sont utilisées pour autoriser la saisie de l’utilisateur lors de
l’exécution
Elles sont référencées dans un bloc PL/SQL avec une esperluette
Elles sont utilisées afin d’éviter le codage en dur des valeurs pouvant
être obtenues lors de l’exécution
37 PL/SQL -- AA Ciss
Invite pour les variables de substitution
38 PL/SQL -- AA Ciss
Utiliser DEFINE pour la variable de l’utilisateur
Exemple
39 PL/SQL -- AA Ciss
Types de données composites
40 PL/SQL -- AA Ciss
Variables de type BLOB
41 PL/SQL -- AA Ciss
Jeu de données (hr) utilisé dans ce cours
42 PL/SQL -- AA Ciss
Ecrire des instructions
exécutables
43 PL/SQL -- AA Ciss
Objectifs du chapitre
A la fin de chapitre, vous pourrez :
1. Identifier les unités lexicales d’un bloc PL/SQL
2. Utiliser des fonctions SQL intégrées dans du code PL/SQL
3. Décrire dans quels cas des conversions implicites ont lieu et dans
quels cas effectuer des conversions explicites
4. Écrire des blocs imbriqués et qualifier des variables avec des
étiquettes
5. Écrire du code lisible grâce à des indentations appropriées
44 PL/SQL -- AA Ciss
Unités lexicales d’un bloc PL/SQL
Les unités lexicales
sont les blocs constitutifs de n’importe quel bloc PL/SQL
Sont des séquences de caractères incluant des chiffres, des
tabulations, des espaces, des retours chariot et des symboles
Peuvent être classées en différents groupe
Identificateurs
Délimiteurs
Littéraux
commentaires
45 PL/SQL -- AA Ciss
Syntaxe et règles relatives au bloc
PL/SQL
Littéraux
Les littéraux de type caractères et date doivent être placés entre
apostrophes
Les nombres peuvent être des valeurs simples ou utiliser une notation
scientifique
Les instructions peuvent s’étendre sur plusieurs lignes
46 PL/SQL -- AA Ciss
Commenter le code
Commentaires monolignes avec deux traits d’union (--)
Commentaires multi-lignes entre les symboles "/*" et "*/"
Exemple
47 PL/SQL -- AA Ciss
Fonction SQL dans le code PL/SQL
Disponibles dans les instructions procédurales
Fonctions monolignes numériques
Fonctions monolignes de type caractère
Conversion de type de données
Fonctions de date
Horodatage
Fonctions GREATEST et LEAST
Fonctions diverses
Non disponibles dans les instructions procédurales
DECODE
Fonctions de groupe
48 PL/SQL -- AA Ciss
Fonction SQL dans le code PL/SQL
Exemples :
Déterminer la longueur d’une chaine
Convertir le nom d’un employé en minuscule
49 PL/SQL -- AA Ciss
Conversion de type de données
Conversion de données en type de données comparables
Elles sont de deux types
Conversion implicite
Conversion explicite
Exemples de fonctions de conversion
TO_CHAR
TO_NUMBER
TO_DATE
TO_TIMESTAMP
50 PL/SQL -- AA Ciss
Conversion de type de données
51 PL/SQL -- AA Ciss
Blocs imbriqués
Les blocs PL/SQL peuvent être imbriqués
Une section exécutable
(BEGIN…END) peut contenir des
blocs imbriqués
Une section de traitement des
exceptions peut contenir des blocs
imbriqués
52 PL/SQL -- AA Ciss
Blocs imbriqués
53 PL/SQL -- AA Ciss
Portée et visibilité des variables
54 PL/SQL -- AA Ciss
Qualifier un identificateur
55 PL/SQL -- AA Ciss
Déterminer la portée d’une variable
56 PL/SQL -- AA Ciss
Opérateurs en PL/SQL
Opérateurs logiques
Opérateurs arithmétiques
Opérateur de concaténation Identiques en
Parenthèses permettant de contrôler l’ordre langage SQL
des opération
Opérateur exponentiel (**)
57 PL/SQL -- AA Ciss
Opérateurs en PL/SQL
Exemple
Incrémenter le compteur pour une boucle
Définir la valeur d’un indicateur booléen
Vérifier qu’un numéro d’employé contient une valeur
58 PL/SQL -- AA Ciss
Règles relatives à la programmation
Faciliter la maintenance du code
En commentant le code
En développant une convention d’utilisation des majuscules et des
minuscules
En développant des conventions d’appellation pour les identificateurs et
les autres objets
En utilisant des indentations pour améliorer la lisibilité
59 PL/SQL -- AA Ciss
Indenter le code
Pour plus de clarté, indenter chaque niveau du code.
Exemples
60 PL/SQL -- AA Ciss
Interagir avec le serveur Oracle
61 PL/SQL -- AA Ciss
Objectifs
A la fin de ce chapitre, vous pourrez
déterminer les instructions SQL pouvant être incluses directement
dans un bloc exécutable PL/SQL
Manipuler les données à l’aide d’instructions LMD dans du code
PL/SQL
Utiliser des instructions de gestion des transactions dans le code
PL/SQL
Utiliser la clause INTO pour le stockage des valeurs renvoyées par une
instructions SQL
Distinguer les curseurs implicites des curseurs explicites
Utiliser des attributs de curseur SQL
62 PL/SQL -- AA Ciss
Instructions SQL en langage PL/SQL
Extraire une ligne de la BD à l’aide de la commande SELECT
Modifier des lignes de la BD en utilisant des commandes LMD
Contrôler une transaction avec les commandes COMMIT,
ROLLBACK ou SAVEPOINT
63 PL/SQL -- AA Ciss
Instructions SELECT en PL/SQL
Extraire des données de la BD avec une commande SELECT
Syntaxe :
64 PL/SQL -- AA Ciss
Instructions SELECT en PL/SQL
La clause INTO est obligatoire
Les interrogations doivent renvoyer une seule ligne
Exemple
65 PL/SQL -- AA Ciss
Extraction de données
Exemple : Extraire les valeurs hire_date et salary de
l’employé désigné
66 PL/SQL -- AA Ciss
Extraction de données
Exemple : Renvoyer la somme des salaires de tous les employés du
département désigné
67 PL/SQL -- AA Ciss
Conventions d’appellation
68 PL/SQL -- AA Ciss
Conventions d’appellation
Utiliser une convention de notation pour éviter toute ambigüité avec
la clause WHERE
Eviter d’utiliser des noms de colonnes de base de données comme
identificateurs
Des erreurs de syntaxe peuvent survenir, car le compilateur PL/SQL
recherche en premier lieu une colonne de la base de données
Les noms des variables locales et les paramètres formels ont une
priorité sur les noms de tables de la BD
Les noms des colonnes des tables de la BD ont une priorité sur les
noms des variables locales
69 PL/SQL -- AA Ciss
Manipulation des données
Modifier des tables de la BD en utilisant des instructions LMD
INSERT
UPDATE
DELETE
MERGE
70 PL/SQL -- AA Ciss
Insérer des données
Exemple : Ajouter un nouvel employé
71 PL/SQL -- AA Ciss
Mise à jour
Exemple : Augmenter le salaire de tous les employés chargés du
contrôle des stocks
72 PL/SQL -- AA Ciss
Supprimer des données
Exemple : Supprimer les tuples appartenant au département 10 à
partir de la table employees
73 PL/SQL -- AA Ciss
Fusionner des lignes
Insérer ou mettre à jour des lignes de la table copy_emp afin
qu’elles correspondent à celles de la table employees
74 PL/SQL -- AA Ciss
Curseur SQL
Un curseur est un pointeur vers la zone mémoire allouée par le
serveur Oracle
Il existe deux types de curseur
Curseurs implicites : créés et gérés en interne par le serveur
Oracle afin de traiter les instructions SQL
Curseurs explicites : déclarés explicitement par le
programmeur
75 PL/SQL -- AA Ciss
Attributs de curseur SQL pour les curseurs
implicites
Grâce aux attributs de curseur SQL, on peut tester le résultat de
l’exécution des instructions SQL
76 PL/SQL -- AA Ciss
Attributs de curseur SQL pour les curseurs
implicites
Exemple : Supprimer de la table employees les tuples avec l’ID
désigné . Afficher ensuite le nombre de lignes supprimées
77 PL/SQL -- AA Ciss
Structures de contrôle
78 PL/SQL -- AA Ciss
Objectifs du chapitre
A la fin de ce chapitre, vous pourrez :
Identifier les types de structures de contrôle et leurs utilisations
Écrire une instruction IF
Utiliser des instructions et des expressions CASE
Écrire et identifier différents types d’instruction de boucle
Appliquer les règles d’utilisation des structures de contrôle
conditionnel.
79 PL/SQL -- AA Ciss
Contrôler le flux d’exécution
80 PL/SQL -- AA Ciss
Instructions IF
Syntaxe
81 PL/SQL -- AA Ciss
Instructions IF simples
82 PL/SQL -- AA Ciss
Instruction IF THEN ELSE
83 PL/SQL -- AA Ciss
Clause IF ELSIF ELSE
84 PL/SQL -- AA Ciss
Valeurs NULL dans les instructions IF
85 PL/SQL -- AA Ciss
Expressions CASE
Une expression CASE sélectionne un résultat et le renvoie
Pour sélectionner le résultat, l’expression CASE utilise des expressions. La
valeur renvoyée par ces expressions est utilisée pour sélectionner une ou
plusieurs alternatives
86 PL/SQL -- AA Ciss
Expression CASE : exemple
87 PL/SQL -- AA Ciss
Expressions de recherche pour la
clause CASE
88 PL/SQL -- AA Ciss
Instruction CASE
89 PL/SQL -- AA Ciss
Traiter les valeurs NULL
Lorsqu’on utilise des valeurs NULL, on peut éviter certaines erreurs
fréquentes en gardant à l’esprit les règles suivantes :
Les comparaisons simples impliquant des valeurs NULL renvoient
toujours une valeur NULL
L’application de l’opérateur NOT à une valeur NULL renvoie toujours
une valeur NULL
Dans les instructions de contrôle conditionnelles, si la condition renvoie
une valeur NULL, la séquence d’instructions associée n’est pas
exécutée.
90 PL/SQL -- AA Ciss
Tables logiques
Créer une condition booléenne simple avec un opérateur de
comparaison
91 PL/SQL -- AA Ciss
Conditions booléennes
Quelle est la valeur de flag dans chaque cas ?
92 PL/SQL -- AA Ciss
Contrôle d’itération : instructions LOOP
Les boucles permettent d’exécuter plusieurs fois une instruction
ou une suite d’instructions
Il existe trois types de boucle :
Boucle de base
Boucle FOR
Boucle WHILE
93 PL/SQL -- AA Ciss
Boucles de base
Syntaxe
94 PL/SQL -- AA Ciss
Boucles de base
95 PL/SQL -- AA Ciss
Boucle WHILE
Une boucle WHILE est utilisée pour répéter des instructions tant
qu’une condition est vérifiée (ie. renvoie TRUE)
Syntaxe
96 PL/SQL -- AA Ciss
Boucle WHILE
97 PL/SQL -- AA Ciss
Boucle FOR
Utiliser une boucle FOR pour simplifier le contrôle du nombre
d’itérations
Ne pas déclarer le compteur (sa déclaration est implicite)
La syntaxe lower_bound..upper_bound est obligatoire
98 PL/SQL -- AA Ciss
Boucle FOR
99 PL/SQL -- AA Ciss
Boucle FOR
Règles
Ne référencer le compteur qu’à l’intérieur de la boucle. Il n’est pas
définie en dehors.
Ne pas référencer le compteur en tant que cible d’une affectation
Aucune limite de boucle ne doit être NULL.
100 PL/SQL -- AA Ciss
Remarques relatives à l’utilisation des
boucles
Utiliser la boucle de base lorsque ses instructions de base s’exécute
au moins une fois
Utiliser la boucle WHILE si la condition doit être évaluée au début
de chaque itération
Utiliser une boucle FOR si le nombre d’itérations est connu.
101 PL/SQL -- AA Ciss
Boucles imbriquées et étiquettes
Imbriquer des boucles à plusieurs niveaux
Utiliser des étiquettes pour différencier les blocs des boucles
Quitter la boucle externe en utilisant l’instruction EXIT qui
référence l’étiquette
102 PL/SQL -- AA Ciss
Boucles imbriquées et étiquettes
103 PL/SQL -- AA Ciss
Utiliser des types de données
composites
104 PL/SQL -- AA Ciss
Objectifs du chapitre
A la fin de ce chapitre, vous pourrez :
Créer des enregistrements PL/SQL définis par l’utilisateur
Créer des enregistrements avec l’attribut %ROWTYPE
Créer une table INDEX BY
Créer une table d’enregistrement INDEX BY
Faire la distinction entre les tables, les enregistrements et les tables
d’enregistrements
105 PL/SQL -- AA Ciss
Types de données composites
Ils peuvent contenir plusieurs valeurs, contrairement aux types
scalaires
Ils sont de deux types:
Enregistrements PL/SQL
Ensembles PL/SQL
Tables INDEX BY ou tableaux associatifs
Tables imbriquées
VARRAY
106 PL/SQL -- AA Ciss
Types de données composites
Utiliser des enregistrement PL/SQL pour stocker des valeurs
de types différents
Utiliser des ensembles PL/SQL pour stocker des valeurs de
même type de données
107 PL/SQL -- AA Ciss
Enregistrements PL/SQL
Ils doivent être composés d’un ou plusieurs champs de type scalaire,
RECORD, ou table INDEX BY
Ils sont semblables aux structures de la plupart des langages de
troisième génération, tels que C et C++
Ils sont définis par l’utilisateur et peuvent être un sous-ensemble
d’une ligne d’une table
Ils traitent un ensemble de champ comme une unité logique
Ils permettent d’extraire une ligne de données à partir d’une table
pour la traiter
108 PL/SQL -- AA Ciss
Créer un enregistrement PL/SQL
Syntaxe
field_declaration
109 PL/SQL -- AA Ciss
Créer un enregistrement PL/SQL
Déclarer des variables pour le stockage du nom, du poste et du
salaire d’un nouvel employé :
110 PL/SQL -- AA Ciss
Structure d’un enregistrement PL/SQL
Exemple
111 PL/SQL -- AA Ciss
Attribut %ROWTYPE
Déclarer une variable correspondant à l’ensemble des colonnes
d’une table ou d’une vue d’une base de données
Faire précéder %ROWTYPE du nom de la table ou de la vue de la
BD
Les noms et types de données des champs de l’enregistrement sont
issus des colonnes de la table ou de la vue.
Syntaxe
112 PL/SQL -- AA Ciss
Avantages liés à l’utilisation de
l’attribut %ROWTYPE
Il n’est pas nécessaire de connaître le nombre et le type des
colonnes sous-jacentes.
Le nombre et les types de colonnes sous-jacentes peuvent être
modifiés durant l’exécution
L’attribut permet d’extraire une ligne avec l’instruction SELECT *.
113 PL/SQL -- AA Ciss
Attribut %ROWTYPE
114 PL/SQL -- AA Ciss
Mettre à jour une ligne d’une table avec
un enregistrement
115 PL/SQL -- AA Ciss
Insérer un enregistrement avec %ROWTYPE
116 PL/SQL -- AA Ciss
Tables INDEX BY ou tableaux
associatifs
Structures PL/SQL avec deux colonnes
Entier ou chaine de type clé primaire
Colonne de type scalaire ou RECORD
Pas de contrainte de taille. La taille dépend des valeurs pouvant être
contenues dans le type de données de clé.
117 PL/SQL -- AA Ciss
Créer une table INDEX BY
Syntaxe
Déclarer une table INDEX BY pour le stockage du nom des employés
118 PL/SQL -- AA Ciss
Structure des tables INDEX BY
119 PL/SQL -- AA Ciss
Créer une table INDEX BY
120 PL/SQL -- AA Ciss
Utiliser des méthodes des tables INDEX BY
Les méthodes suivantes facilitent l’utilisation des tables INDEX
BY
EXIST PRIOR
COUNT NEXT
FIRST et LAST DELETE
121 PL/SQL -- AA Ciss
Table d’enregistrements INDEX BY
Définir une variable de table INDEX BY contenant une ligne entière
d’une table
122 PL/SQL -- AA Ciss
Exemple de table d’enregistrements INDEX
BY
123 PL/SQL -- AA Ciss
Tables imbriquées
124 PL/SQL -- AA Ciss
VARRAY
125 PL/SQL -- AA Ciss
Curseurs explicites
126 PL/SQL -- AA Ciss
Objectifs
A la fin de ce chapitre, vous pourrez :
Faire la différence entre un curseur implicite et un curseur explicite
Déterminer quand et pourquoi utiliser un curseur explicite
Déclarer et contrôler des curseurs explicites
Utiliser une boucle simple et une boucle FOR de curseur pour
extraire des données
Déclarer et utiliser des curseurs avec parmètres
Verrouiller des ligne à l’aide ce la clause FOR UPDATE
Référencer la ligne actuelle avec la clause WHERE CURRENT
127 PL/SQL -- AA Ciss
A propos des curseurs
A chaque instruction SQL exécutée par le serveur Oracle est associé
un curseur individuel :
Curseurs implicites : déclarés et gérés par le compilateur PL/SQL pour
toutes les instructions LMD et les instructions SELECT PL/SQL
Curseurs explicites : déclarés et gérés par le programmeur.
128 PL/SQL -- AA Ciss
Opérations de curseur explicite
129 PL/SQL -- AA Ciss
Contrôler les curseurs explicites
130 PL/SQL -- AA Ciss
Contrôler les curseurs explicites
131 PL/SQL -- AA Ciss
Déclarer un curseur
Syntaxe
Exemple
132 PL/SQL -- AA Ciss
Ouvrir le curseur
133 PL/SQL -- AA Ciss
Extraire des données du curseur
134 PL/SQL -- AA Ciss
Extraire des données du curseur
135 PL/SQL -- AA Ciss
Fermer le curseur
136 PL/SQL -- AA Ciss
Curseurs et enregistrements
Traiter les lignes de l’ensemble actif en extrayant (fetch) les valeurs
pour les placer dans un enregistrement PL/SQL
137 PL/SQL -- AA Ciss
Boucle FOR de curseur
Syntaxe
La boucle FOR de curseur simplifie le traitement des curseurs
explicites
Des opérations d’ouverture, extraction (fetch), de sortie, de fermeture
ont lieu de manière implicite
L’enregistrement est déclaré implicitement
138 PL/SQL -- AA Ciss
Boucle FOR de curseur
139 PL/SQL -- AA Ciss
Attributs d’un curseur explicite
Obtenir les informations concernant l’état d’un curseur
140 PL/SQL -- AA Ciss
Attribut %ISOPEN
Extraire (fetch) les lignes uniquement lorsque le curseur est ouvert
Utiliser l’attribut %ISOPEN avant de réaliser une extraction pour
déterminer si un curseur est ouvert.
Exemple
141 PL/SQL -- AA Ciss
Exemple d’utilisation des attributs
%ROWCOUNT et %NOTFOUND
142 PL/SQL -- AA Ciss
Boucle FOR de curseur utilisant des
sous-interrogations
Il n’est pas nécessaire de déclarer le curseur
Exemple
143 PL/SQL -- AA Ciss
Curseurs avec paramètres
Syntaxe
Transmettre des paramètre au curseur au moment de son ouverture et de
l’exécution de l’interrogation
Ouvrir un curseur explicite à plusieurs reprises en renvoyant un
ensemble actif différent à chaque fois
144 PL/SQL -- AA Ciss
Curseurs avec paramètres
145 PL/SQL -- AA Ciss
Clause FOR UPDATE
Syntaxe
Utiliser un verrouillage explicite pour interdire l’accès aux autres
sessions pendant la durée d’une transaction
Verrouiller les lignes avant la mise à jour ou la suppression
146 PL/SQL -- AA Ciss
Clause WHERE CURRENT OF
Syntaxe
Utiliser des curseurs pour mettre à jour ou supprimer les lignes en
cours
Inclure la clause FOR UPDATE dans l’interrogation du curseur pour
verrouiller au préalable les lignes
Utiliser la clause WHERE CURRENT OF pour référencer la ligne en
cours à partir d’un curseur explicite
147 PL/SQL -- AA Ciss
Curseurs contenant des sous-
interrogations
Exemple
148 PL/SQL -- AA Ciss
Gestion des exceptions
149 PL/SQL -- AA Ciss
Objectifs
A la fin de ce chapitre, vous pourrez :
Définir des exceptions PL/SQL
Reconnaitre des exceptions non gérées
Répertorier et utiliser différents types de gestionnaires d’exceptions
PL/SQL
Intercepter les erreurs non prédéfinies
Décrire l’effet de la propagation des exceptions dans des blocs
imbriqués
Personnaliser les messages d’exception PLS/SQL
150 PL/SQL -- AA Ciss
Exemple
151 PL/SQL -- AA Ciss
Exemple
152 PL/SQL -- AA Ciss
Traitement des exceptions en PL/SQL
Une exception est une erreur PL/SQL détectée pendant
l’exécution du programme
Une exception peut être générée
Implicitement par le serveur Oracle
Explicitement par le programme
Une exception peut être traitée
Par interception à l’aide d’un gestionnaire
Par propagation vers l’environnement appelant
153 PL/SQL -- AA Ciss
Traitement des exceptions en PL/SQL
154 PL/SQL -- AA Ciss
Types d’exception
Exceptions prédéfinie du serveur Oracle Exception
Exception non prédéfinie du serveur Oracle déclenchée
implicitement
Exception définie par l’utilisateur Exception
déclenchée
explicitement
155 PL/SQL -- AA Ciss
Intercepter les exceptions
Syntaxe
156 PL/SQL -- AA Ciss
Règles d’interception des exceptions
Le mot-clé EXCEPTION débute la section de traitement des
exceptions
Plusieurs gestionnaires d’exceptions sont autorisés
Un seul gestionnaire est traité avant la sortie du bloc
WHEN OTHERS est la dernière clause
157 PL/SQL -- AA Ciss
Intercepter les erreurs prédéfinies du
serveur Oracle
Utiliser le nom prédéfini à l’intérieur du sous-programme de
traitement des exceptions
Exemples d’exceptions prédéfinies
NO_DATA_FOUND
TOO_MANY_ROWS
INVALID_CURSOR
ZERO_DIVIDE
DUP_VAL_ON_INDEX
158 PL/SQL -- AA Ciss
Intercepter les erreurs non prédéfinies
du serveur Oracle
159 PL/SQL -- AA Ciss
Erreurs non prédéfinies
Intercepter l’erreur numéro – 01400 du serveur Oracle,
impossible d’insérer la valeur NULL
160 PL/SQL -- AA Ciss
Fonctions d’interception des exceptions
SQLCODE : renvoie la valeur numérique du code d’erreur
SQLERRM : renvoie le message d’erreur associé au code
d’erreur
161 PL/SQL -- AA Ciss
Fonctions d’interception des exceptions
Exemple
162 PL/SQL -- AA Ciss
Intercepter les exceptions définies par
l’utilisateur
163 PL/SQL -- AA Ciss
Intercepter les exceptions définies par
l’utilisateur
164 PL/SQL -- AA Ciss
Environnements appelants
165 PL/SQL -- AA Ciss
Propagation des exceptions d’un sous-
bloc
Des sous-blocs peuvent
traiter une exception ou
la transmettre à un bloc
englobant
166 PL/SQL -- AA Ciss
Procédure RAISE_APPLICATION_ERROR
Syntaxe
On peut utiliser cette procédure pour générer des messages
d’erreur définis par l’utilisateur à partir de sous-programmes
stockés
Elle permet de signaler les erreurs à l’applications et d’éviter le
renvoie d’exceptions non traitées
167 PL/SQL -- AA Ciss
Procédure RAISE_APPLICATION_ERROR
Elle peut être utilisée à deux endroits:
Section exécutable
Section de traitement des exceptions
Elle renvoie à l’utilisateur les conditions de l’erreur de manière
cohérente par rapport aux autres erreurs du serveur Oracle
168 PL/SQL -- AA Ciss
Procédure RAISE_APPLICATION_ERROR
Section exécutable
Section de traitement des exception
169 PL/SQL -- AA Ciss
Procédures et fonctions stockées
170 PL/SQL -- AA Ciss
Objectifs
A la fin de ce chapitre, vous pourrez
Faire la distinction entre les blocs anonymes et les sous-
programmes
Créer une procédure simples et l’appeler à partir d’un bloc
anonyme
Créer une fonction simple
Créer une fonction simple qui accepte un paramètre
Faire la distinction entre les procédures et les fonctions
171 PL/SQL -- AA Ciss
Procédures et fonctions
Blocs PL/SQL nommés
Appelés sous-programmes PL/SQL
Présentent des structures de blocs semblables à celles des blocs
anonymes
Section déclarative facultative (sans le mot-clé DECLARE)
Section exécutable obligatoire
Section facultative de traitement des exceptions
172 PL/SQL -- AA Ciss
Différences entre les blocs anonymes et
les sous-programmes
173 PL/SQL -- AA Ciss
Procédure : syntaxe
174 PL/SQL -- AA Ciss
Procédure : exemple
175 PL/SQL -- AA Ciss
Appeler la procédure
176 PL/SQL -- AA Ciss
Fonction : syntaxe
177 PL/SQL -- AA Ciss
Fonction : exemple
178 PL/SQL -- AA Ciss
Appeler la fonction
179 PL/SQL -- AA Ciss
Transmettre un paramètre à une fonction
180 PL/SQL -- AA Ciss
Appeler une fonction avec un paramètre
181 PL/SQL -- AA Ciss