Vous êtes sur la page 1sur 33

Chapitre 1 - Introduction au langage

PL/SQL
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
Caractéristiques du PL/SQL
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.
Conventions de programmation

 Conventions de nommage des variables


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 empno=9854;
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.
La base de données exemple
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
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

 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 prend le type de la colonne
v_job emp.job%TYPE; job de la table emp.
v_prime NUMBER(5,2) := 500.50; v_prime et est initialisée à 500,45.
v_prime_min v_prime%TYPE := v_prime_min prend le type de la variable
v_prime*2; v_prime
BEGIN

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 prend la structure d’un
emp_record emp%ROWTYPE; enregistrement de la table emp.
v_sal NUMBER:=800;
BEGIN Accès aux attributs de l’enregistrement
emp_record.empno:=2564;
emp_record.sal:=v_sal+100;

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 prend la structure d’un
emp_record emp%ROWTYPE; enregistrement de la table emp.
v_sal NUMBER:=800;
BEGIN Accès aux attributs de l’enregistrement
emp_record.empno:=2564;
emp_record.sal:=v_sal+100;

 À noter qu’avec la directive %ROWTYPE, les attributs n’héritent pas


la contrainte NOT NULL.
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

 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 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 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 Nécessaire à l’affichage
ACCEPT s_nbr PROMPT ‘Saisir un Saisie de la variable de session s_nbr
entier’;
DECLARE
v_doub NUMBER;
BEGIN
v_doub := &s_nbr; Manipulation de la variable (ajout du &)
DBMS_OUTPUT.PUT_LINE(‘Le Affichage de la variable PL/SQL v_doub
résultat est ‘||v_doub);
END;
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; Déclaration de la variable sous SQL*Plus
DECLARE
v_compt NUMBER := 99;
BEGIN
:g_compteur := v_compt+1; Manipulation de la variable (ajout de :)
END;
/
PRINT g_compteur; Affichage de la variable sous SQL*Plus
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 structures de contrôle
Le contrôle conditionnel

 Il existe deux structures de contrôle conditionnelles :


 IF – THEN – ELSE
 CASE – WHEN - THEN
 La syntaxe complète de la structure IF – THEN – ELSE est la suivante :

Syntaxe Exemple
IF condition THEN ...
instructions; IF v_deptno=10 THEN v_comm:=5000;
[ELSIF condition THEN ELSIF v_deptno=20 THEN v_comm:=7500;
instructions;] ELSIF v_deptno=30 THEN v_comm:= 3000;
[ELSE ELSE v_comm:= 2000;
instructions;] END IF;
END IF; ...
Les structures de contrôle
Le contrôle conditionnel

 La syntaxe complète de la structure CASE – WHEN - THEN est la


suivante :
Syntaxe Exemple
CASE selector ...
WHEN expression1 CASE v_job
THEN result1 WHEN ‘CLERK’
THEN v_comm:=100
WHEN expression2
WHEN ‘SALESMAN’
THEN result2
THEN v_comm:=200
... ELSE v_comm:=300;
WHEN expressionN END;
THEN resultN ...
[ELSE resultN+1;]
END;
Les structures de contrôle
Traitement des valeurs NULL

 Ne pas oublier que comparer une valeur avec le NULL, retourne


nécessairement la valeur NULL
Exemple 1 Exemple 2
x:=5; a := NULL;
y:=NULL; b := NULL;
... ...
IF x!=y THEN IF a=b THEN
-- renvoie NULL, et -- renvoie NULL, et pas TRUE
-- pas TRUE sequence_of_statements;
instructions; -- instructions non exécutées
-- ces instructions END IF;
-- ne sont pas
-- exécutées
END IF;
Les structures de contrôle
Les boucles

 Une structure itérative répète un ensemble d’instructions plusieurs


fois
 PL/SQL offre trois types de boucles :
 La boucle basique (LOOP … EXIT WHEN)
 La boucle FOR
 La boucle WHILE
Les blocs imbriqués

Blocs PL/SQL
DECLARE
var1
BEGIN

DECLARE
var2
BEGIN
… Portée de
DECLARE var1
Portée
var3 Portée
de var2
BEGIN de
… var3
END;
END;

END;

Vous aimerez peut-être aussi