Introduction au langage PL/SQL
Dr. Mohamed Anis BACH TOBJI
Maitre assistant à l’ESEN – Université de Manouba
Caractéristiques du PL/SQL
Un langage procédural qui étend SQL. Il est propre à Oracle
Modulaire, grâce aux blocs, fonctions & procédures, ainsi que les
packages
Déclaratif : déclaration de variables, constantes, exceptions, de
curseur.
Fournit les structures itératives et conditionnelles
Traitement des erreurs (routines ou définies par l’utilisateur)
Portabilité vers n’importe quel environnement supportant Oracle
Intégration : pas de problèmes d’intégration entre Oracle et les
environnements de développements
Conventions de programmation
Conventions du code
En majuscule
Les commandes SQL (SELECT, FROM, WHERE etc.)
Les mots clé PL/SQL (DECLARE, BEGIN, NUMBER etc.)
En minuscule
Les noms de variables PL/SQL
Les noms de colonnes, tables, vues etc.
Structure d’un bloc PL/SQL
Un bloc PL/SQL contient trois sections :
Une section déclarative: optionnelle, contient les déclarations
des variables, constantes, curseurs, exceptions, etc. Commence
par le mot clé DECLARE
Une section exécutable: obligatoire, contient les requêtes SQL
et les instructions PL/SQL. Commence par le mot BEGIN
Une section de traitement d’erreurs : optionnelle, contient les
instructions à exécuter au cas où des erreurs se produisent.
Commence par le mot EXCEPTION
À noter que le bloc se termine par le mot clé END
Structure d’un bloc PL/SQL
Exemple de bloc PL/SQL
DECLARE
v_sal NUMBER;
BEGIN
SELECT sal INTO v_sal FROM emp
WHERE ename=‘SMITH’;
EXCEPTION
WHEN NO_DATA_FOUND THEN
…
END
Les structures de programme
PL/SQL
Les blocs anonymes
Les procédures et fonctions stockées
Les procédures et fonctions d’application
Les packages
Les triggers (déclencheurs) de base de données
Les triggers (déclencheurs) d’application
Les règles syntaxiques
Un identifiant :
Max de 30 caractères, doit débuter par une lettre.
Ne doit pas être un mot réservé.
Son nom doit être différent des noms de colonnes.
Les chaînes de caractères et les dates constantes entre simples
quotes.
Les commentaires sur plusieurs lignes doivent être inclus entre les
caractères " /* " et " */ "
Les caractères "- -" sont utilisés pour mettre une seule ligne en
commentaire.
Les types de variables
Il existe deux types de variables qui fonctionnent sous PL/SQL
Les variables PL/SQL
Variable scalaire : contenant une valeur unique
Variable composée : contenant plusieurs valeurs comme le
RECORD, le TABLE, le NESTED TABLE, le VARRAY
Variable référence : variable qui pointe vers un type de
données
LOB : variable localisateur d’objets volumineux tel que les
images et les vidéos
Les variables non PL/SQL
Les variables de substitution
Les variables hôtes
Les types de données
scalaires
Les principaux types de données scalaires
Les types numériques
INTEGER, POSITIVE
PLS_INTEGER, BINARY_INTEGER
NUMBER(n,d), DECIMAL, REAL
Les types chaine de caractère
LONG, VARCHAR2(n)
CHAR(n)
Le type booléen
BOOLEAN (true, false ou null)
Le type date
DATE
Les variables scalaires
Déclaration et initialisation
variable_name [CONSTANT] datatype [NOT NULL] [:=|DEFAULT expr];
datatype : le type de données de la variable, qui est soit
scalaire, composé, référence ou LOB.
CONSTANT : contraint la variable à être une constante
NOT NULL : ce mot clé contraint la variable à contenir une
valeur.
expr : valeur initiale d’une variable, peut être une valeur
littérale, une autre variable ou une expression impliquant des
opérateurs et des fonctions.
Les variables scalaires
La déclaration de plusieurs variables sur la même ligne est interdite
Affectation
variable := expression;
DEFAULT : contraint la variable à être une constante
SELECT expression INTO variable FROM...
Impossible d’affecter la valeur NULL à une variable déclarée NOT
NULL (l’erreur VALUE_ERROR est renvoyée)
La contrainte NOT NULL doit être suivie par une initialisation
Les variables scalaires
Le mot clé %TYPE déclare une variable ayant le même type d’une
autre variable ou d’une colonne d’une table ou vue existantes.
Code PL/SQL Commentaires
DECLARE
v_job emp.job%TYPE;
v_job prend le type de la colonne
job de la table emp.
v_prime NUMBER(5,2) := 500.50;
v_prime_min v_prime%TYPE :=
v_prime*2;
BEGIN
…
v_prime et est initialisée à 500,45.
v_prime_min prend le type de la variable
v_prime
Les variables composées –
le RECORD
Le mot clé %ROWTYPE déclare une variable RECORD ayant la même
structure que l’enregistrement d’une table/vue.
Code PL/SQL Commentaires
DECLARE
emp_record emp%ROWTYPE;
v_sal NUMBER:=800;
Emp_record prend la structure d’un
enregistrement de la table emp.
BEGIN
emp_record.empno:=2564;
emp_record.sal:=v_sal+100;
…
Accès aux attributs de l’enregistrement
Les variables composées –
le RECORD
Le mot clé %ROWTYPE déclare une variable RECORD ayant la même
structure que l’enregistrement d’une table/vue.
À noter qu’avec la directive %ROWTYPE, les attributs n’héritent pas
la contrainte NOT NULL.
Code PL/SQL Commentaires
DECLARE
emp_record emp%ROWTYPE;
v_sal NUMBER:=800;
Emp_record prend la structure d’un
enregistrement de la table emp.
BEGIN
emp_record.empno:=2564;
emp_record.sal:=v_sal+100;
…
Accès aux attributs de l’enregistrement
Les variables composées –
le RECORD
Pour définir un enregistrement personnalisé, il faut déclarer un type
RECORD
Ensuite, pour l’utiliser, il faut déclarer une variable avec le type
nomRecord
Les variables composées –
le type TABLE
Le type TABLE permet la déclaration de tableaux dynamiques (sans
taille initiale fixe)
Une variable de type TABLE inclut deux colonnes, une clé primaire
de type BINARY_INTEGER et une colonne de type scalaire ou RECORD.
Primary key Colonne
… …
1 Mohamed Toumi
2 Sami Tlili
3 Meriam Bouzid
… …
Les variables composées –
le type TABLE
Le type TABLE est défini avec cette syntaxe
La déclaration d’une variable se fait selon cette syntaxe
Les variables composées –
le type TABLE
Il existe des procédures et des fonctions qui permettent de
manipuler les variables TABLE :
Les variables non-PL/SQL
Les variables hôtes (dite aussi de session)
C’est une variable définie dans l’environnement hôte du
programme PL/SQL (SQL*Plus, Forms Developer…)
Sous SQL*Plus, l’utilisation d’une variable hôte se fait ainsi :
Instructions Commentaires
VARIABLE g_compteur NUMBER;
DECLARE
v_compt NUMBER := 99;
BEGIN
:g_compteur := v_compt+1;
END;
/
PRINT g_compteur;
Déclaration de la variable sous SQL*Plus
Manipulation de la variable (ajout de :)
Affichage de la variable sous SQL*Plus
Les variables non-PL/SQL
Les variables de substitution
Une variable de substitution est définie sous SQL*Plus. Sa valeur
est saisie sous SQL*Plus, et est remplacée intégralement dans le bloc
L’utilisation d’une variable de substitution :
Instructions Commentaires
SET SERVEROUTPUT ON
ACCEPT s_nbr PROMPT ‘Saisir un
entier’;
DECLARE
v_doub NUMBER;
BEGIN
v_doub := &s_nbr;
DBMS_OUTPUT.PUT_LINE(‘Le
résultat est ‘||v_doub);
END;
Nécessaire à l’affichage
Saisie de la variable de session s_nbr
Manipulation de la variable (ajout du &)
Affichage de la variable PL/SQL v_doub
Les opérateurs et les
fonctions
Les opérateurs
Arithmétiques
+ , - , * , /
Logiques
AND , OR, NOT
Concaténation
||
Comparaison
= , != , < , > , <= , >= , LIKE , BETWEEN , IS NULL , IN
Les fonctions
Disponibles dans les instructions PL/SQL
Toutes les fonctions de ligne (lower, substr, length, round,
add_months etc.)
Les blocs imbriqués
Blocs PL/SQL
DECLARE
var1
BEGIN
…
DECLARE
var2
BEGIN
…
DECLARE
var3
BEGIN
…
END;
END;
…
END;
Portée
de
var3
Portée
de
var2
Portée
de var1