Chapitre 1 : Introduction au PL/SQL
1. Introduction au PL/SQL :
1.1. Les caractéristiques PL/SQL :
- Procedural Language/SQL (PL/SQL) est une extension procédurale au SQL propre à
Oracle. Le PL/SQL possède les caractéristiques des langages de programmation
procéduraux, tels que le C et le FORTRAN, qui ne sont pas disponibles dans le SQL :
l'encapsulation des données, le traitement des exceptions, l'orientation objet…
- Le PL/SQL est un puissant langage de traitement des transactions.
- Le PL/SQL est un langage hybride : il utilise des ordres SQL pour accéder à la base de
données et des instructions PL/SQL pour contrôler les ordres SQL afin de traiter de façon
explicite des données.
- Le PL/SQL permet d'inclure la manipulation des données et les ordres SQL dans des
blocs structurés et dans des unités procédurales de code.
1.2. Les avantages du PL/SQL
o La modularisation du développement des programmes grâce aux :
- Blocs : regroupement en blocs des instructions entre lesquelles il existe un lien logique.
- Fonctions et procédures : imbrication de sous blocs à l’intérieur de blocs plus
importants afin d’élaborer des programmes puissants. Fractionnement d'un problème
complexe en un ensemble de modules logiques bien définis et simples à gérer. Ces
modules peuvent être ensuite mis en œuvre à l’intérieur de blocs.
- Packages : Regroupement des modules en une seule unité logique.
o Déclaration d’identifiants tels que des variables, des constantes, des curseurs, des exceptions
- Variables PL/SQL : déclaration de variables dont le type de données peut être simple
ou composé.
- Utilisation des identifiants dans les instructions SQL et dans les instructions procédurales.
- Attributs %TYPE et %ROWTYPE : déclaration dynamique de variables, en fonction
de la structure de données des colonnes d'une table et des tables de la base de données.
o Structures de contrôle des langages procéduraux
- Les boucles : écriture de programmes avec des structures de contrôle issues des
NOTE DE COURS SGBD 1
langages procéduraux. Une séquence d’instructions peut donc être exécutée de façon
conditionnelle ou itérative dans une boucle.
- Les curseurs explicites : traitement de façon individuelle des lignes renvoyées
par une requête.
o Traitement des erreurs
- Routine de traitement des exceptions : traitement des erreurs du serveur Oracle.
- Les exceptions définies par l'utilisateur : déclaration de conditions d’erreurs par
l'utilisateur et traitement des erreurs avec les routines de traitement des exceptions.
o L’amélioration des performances
- PL/SQL peut être utilisé pour regrouper les ordres SQL ensemble en un seul bloc et
d'envoyer ce bloc au serveur en un seul appel, ce qui a pour conséquence de réduire le
trafic sur le réseau.
1.3. Les fonctionnalités du moteur PL/SQL
Un serveur Oracle prenant en charge PL/SQL est appelé serveur Oracle avec extension
procédurale.
Les blocs PL/SQL sont transmis de l'application au moteur PL/SQL du serveur Oracle. Ensuite,
le moteur PL/SQL fractionne les instructions SQL du bloc en instructions séparées, puis les
envoie au moteur SQL.
Figure 1 : Le moteur PL/SQL au niveau du serveur Oracle
NOTE DE COURS SGBD 2
Figure 2 : Le moteur PL/SQL des outils Oracle
Le moteur PL/SQL des outils Oracle filtre les instructions SQL du code de l’application et les
envoie individuellement vers le moteur SQL du serveur Oracle. Il exécute les instructions
procédurales du bloc PL/SQL avec le moteur procédural du moteur PL/SQL.
[Link] de programmation PL/SQL
2.1. La convention du code
S'écrivent en majuscule :
- les commandes SQL, tels que SELECT, INSERT…
- les mots clés PL/SQL, tels que DECLARE, BEGIN, IF…
- les types de données, tels que VARCHAR2, BOOLEAN…
Se mettent en minuscules :
- les identifiants et les paramètres, tels que v_sal, emp_cursor, g_sal, p_empno…
- les noms de tables et les noms de colonnes, tels que dept, emp, empno, ename…
2.2. La convention de dénomination d'un identifiant
Afin de maintenir l’uniformité du code, un ensemble de préfixes et de suffixes a été développé
afin de distinguer facilement un identifiant parmi les autres identifiants tels que les objets de
NOTE DE COURS SGBD 3
base de données et les objets nommés.
Grâce à une convention de dénomination standard, le code est facile à lire et à mettre
à jour.
Identifiant Convention de nommage Exemple
Variables v_name v_sal
Constantes c_name c_compagny
Curseurs name_cursor emp_cursor
Exceptions e_name e_too_many
Types Table name_table_type amount_table_type
Tables name_table order_table
Types Record name_record_type emp_record_type
Records name_record customer_record
Variables de substitution SQL*Plus p_name p_sal
Variables globales SQL*Plus g_name g_year_sal
NOTE DE COURS SGBD 4
[Link] structures de programme PL/SQL
3.1. Les blocs PL/SQL
PL/SQL est un langage structuré en blocs : les instructions entre lesquelles il existe un lien
logique sont regroupées en blocs.
Un bloc de base PL/SQL peut contenir trois sections :
Section déclarative Elle contient toutes les déclarations des variables, constantes, curseurs et
exceptions définies par l’utilisateur et utilisées dans la section exécutable.
La section déclarative est facultative et doit commencer par le mot clé
Section exécutable DECLARE.
Elle contient des instructions SQL permettant de manipuler les données de
la base de données et des instructions PL/SQL permettant de manipuler les
données d’un bloc. La section exécutable est obligatoire et doit commencer
Section de traitement par
Elle le mot cléles
spécifie BEGIN.
actions à effectuer lorsque des erreurs ou des conditions
des exceptions anormales se produisent dans la section exécutable. La section de
traitement des exceptions est facultative et doit commencer par le mot clé
EXCEPTION.
Un bloc PL/SQL se termine par le mot-clé END suivi d’un point virgule.
[DECLARE]
[<Section déclarative optionnelle>]
BEGIN
<Section exécutable obligatoire>
[EXCEPTION]
<Section de traitement des exceptions optionnelle>]
END;
NOTE DE COURS SGBD 5
Exemple :
DECLARE
v_ename VARCHAR2(5);
BEGIN
SELECT ename
INTO v_ename
FROM emp
WHERE empno = 1234;
EXCEPTION
WHEN NO_DATA_FOUND THEN
...
END;
La section déclarative de ce bloc déclare une variable de type VARCHAR2, d'une longueur de 5
et appelée v_ename. La section exécutable est constituée d'une seule instruction : un ordre
SELECT
3.2. Les structures de programmes PL/SQL
Les structures de programmes sont des blocs ou des modules PL/SQL exécutant différentes
fonctions
Il existe plusieurs types de structures de programmes : les blocs anonymes, les procédures
et fonctions stockées, les procédures et fonctions d'application, les packages, les triggers de
base de données et les triggers d'application.
3.2.1 Les blocs anonymes
Un bloc anonyme est un bloc PL/SQL non nommé, imbriqué dans une application ou créé de
façon interactive. Un bloc anonyme est déclaré dans une application à l’endroit de son
exécution.
[DECLARE
<Déclarations>]
BEGIN
<Instructions>
[EXCEPTION]
<Traitement des erreurs>
END ;
Pour exécuter un bloc anonyme dans le buffer de SQL*Plus, il faut utiliser le caractère slash
"/". Si le bloc s'exécute avec succès, sans erreurs soulevées ni d'erreurs de compilation, le
message suivant s'affiche :
NOTE DE COURS SGBD 10
PL/SQL procedure successfully completed
3.2.2 Les procédures et fonctions stockées
Il s’agit d’un bloc PL/SQL nommé et stocké sous forme d’objet de base de données
dans le dictionnaire de données du serveur Oracle. Il peut utiliser des paramètres d’entrée et de
sortie, il peut être invoqué de façon répétée et est disponible sur le serveur Oracle avec extension
procédurale.
PROCEDURE nom (parameters) IS FUNCTION name (parameters)
<déclaration> RETURN datatype IS
<déclaration>
BEGIN BEGIN
<instructions> <instructions>
[EXCEPTION] [EXCEPTION]
<traitement des exceptions> <traitement des exceptions>
END ; END ;
Une fonction, à la différence d'une procédure, retourne une valeur.
Il existe trois types de paramètres :
- IN : passer des valeurs à un sous-programme qui est appelé.
- OUT : retourner des valeurs à celui qui a appelé le sous-programme.
- INOUT : passer des valeurs initiales à un sous-programme et retourner la mise à jour des
valeurs à celui qui a appelé le sous-programme.
3.2.3 Les procédures et fonctions d'application
Il s’agit d’une autre structure de programmation possédant les mêmes attributs (et même syntaxe)
qu’une procédure ou fonction stockée. Il s’agit d’un bloc PL/SQL nommé résidant dans une
application Oracle Developer ou dans une librairie partagée. Cette structure accepte les paramètres
(entrée et sortie), et peut être invoquée de façon répétée. Elle est disponible avec le serveur Oracle
et les composants de Oracle Developer.
3.2.4 Les packages
NOTE DE COURS SGBD 11
Il s’agit d’un bloc PL/SQL nommé regroupant des procédures, des fonctions et des identifiants
(curseurs, variables, constantes, exceptions, définition de collection) liés entre eux. Les packages
sont disponibles sur le serveur Oracle avec extension procédurale.
PACKAGE nom IS
PROCEDURE nom(arguments) ;
END ;
CREATE PACKAGE BODY AS
PROCEDURE nom AS
END ;
END
3.2.5 Les triggers de base de données
Il s’agit d’un bloc PL/SQL associé à une table de la base de données. Il est exécuté
automatiquement lors de la manipulation du contenu de la table à laquelle il est attaché. Le
trigger de base de données est disponible sur le serveur Oracle.
TRIGGER nom { BEFORE | AFTER } [FOR EACH ROW] [WHEN
<condition>] BEGIN
<instructions>
[EXCEPTION]
END ; <traitement des exceptions>
NOTE DE COURS SGBD 11
3.3. Les règles syntaxiques des blocs PL/SQL
Les règles générales de syntaxe appliquées au langage SQL le sont également au langage
PL/SQL.
- Un identifiant peut comporter un maximum de 30 caractères et doit commencer par
une lettre.
- Les mots réservés ne peuvent pas être utilisés comme identifiant.
- Le nom d’un identifiant doit être différent des noms des colonnes des tables (au
quel cas le moteur interprète l’identifiant comme une référence à la colonne).
- Les mots clés ne doivent pas être coupés en fin de ligne.
- Les chaînes de caractères et les dates figurant dans les instructions PL/SQL doivent
être inclues entre simples quotes.
- Les expressions numériques sont représentées soit par une valeur simple, soit
par une notation scientifique.
- Les commentaires sur plusieurs lignes doivent être inclus entre les caractères " /* "
et " */ " (Ces symboles sont à éviter après le mot clé SELECT car ils sont utilisés
dans ce cas comme indicateur pour l’optimisateur). Les caractères "- -" sont utilisés
pour mettre une seule ligne en commentaire.
- Les unités lexicales doivent être séparées à l’aide d’un ou plusieurs espaces ou
délimiteurs
NOTE DE COURS SGBD 12