0% ont trouvé ce document utile (0 vote)
103 vues181 pages

PL SQL

Ce document présente un cours sur le langage PL/SQL, abordant des sujets tels que les variables, les structures de contrôle, les curseurs, et la gestion des exceptions. Les objectifs incluent la compréhension des extensions de SQL, l'écriture de code PL/SQL efficace, et l'interaction avec des bases de données Oracle. Le document détaille également la structure des blocs PL/SQL et les règles de déclaration des variables.

Transféré par

Ibrahima Lamine Ba
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
103 vues181 pages

PL SQL

Ce document présente un cours sur le langage PL/SQL, abordant des sujets tels que les variables, les structures de contrôle, les curseurs, et la gestion des exceptions. Les objectifs incluent la compréhension des extensions de SQL, l'écriture de code PL/SQL efficace, et l'interaction avec des bases de données Oracle. Le document détaille également la structure des blocs PL/SQL et les règles de déclaration des variables.

Transféré par

Ibrahima Lamine Ba
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi