Vous êtes sur la page 1sur 5

Chap.

1 : Le langage PL/SQL

I. INTRODUCTION
Le langage SQL est un langage « ensembliste », c'est-à-dire qu'il ne manipule qu'un ensemble de
données satisfaisant des critères de recherche. PL/SQL est un langage « procédural », il permet de
traiter de manière conditionnelle les données retournées par un ordre SQL. (Bizoï, 2007)
Le langage PL/SQL, acronyme de « Procedural Language extensions to SQL », comme son nom
l'indique, étend SQL en lui ajoutant des éléments, tels que :
- Les variables et les types.
- Les structures de contrôle et les boucles.
- Les procédures et les fonctions.
- Les types d'objets et les méthodes.
Remarques : Le langage PL/SQL peut contenir les instructions SQL de type Langage de Manipulation de
Données, mais il ne peut comporter aucune instruction du Langage de Définition de Données.

II. STRUCTURE D’UN BLOC PL/SQL


PL/SQL n'interprète pas une commande, mais un ensemble de commandes contenues dans un
programme ou bloc PL/SQL.
La structure d’un bloc est la suivante:
DECLARE
Déclarations de variables, constantes, exception;
BEGIN
Section obligatoire contenant des instructions SQL et PL/SQL ou des blocs fils
(Possibilité d’imbrication de blocs)
EXCEPTION
Traitement des exceptions (gestion des erreurs)
END;
Remarques :
Les sections DECLARE et EXCEPTION sont optionnelles.
Chaque instruction de n’importe quelle section doit se terminer par un « ; »
Exemple :
DECLARE
qte_stock number(5);
BEGIN
SELECT quantite INTO qte_stock FROM PRODUITS WHERE codprod= ‘p1’;
IF qte_stock > 0
THEN
UPDATE produits SET quantite=quantite-1 WHERE codprod= ‘p1’;
INSERT INTO achat VALUES (‘p1', SYSDATE);
ELSE
INSERT INTO acheter VALUES ('Plus de p1',SYSDATE);
END IF;
COMMIT;
END;

7
Chap. 1 : Le langage PL/SQL

III. LES DECLARATIONS PL/SQL


La partie déclarative dans un bloc PL/SQL, peut comporter trois types de déclarations. Elle est délimitée
par les mots-clé :
- DECLARE, qui spécifie le début.
- BEGIN, qui signifie la fin de la déclaration et le début de la partie des commandes.
- Les types de déclarations possibles dans cette partie sont les suivants :
o déclaration des variables et des constantes,
o déclaration de curseurs,
o déclaration des exceptions.
Toute variable doit être déclarée avant de pouvoir être utilisée.

III.1 Types de données

Chaque variable ou constante utilisée dans un bloc PL/SQL, possède un type de données.
PL/SQL offre deux variétés de types de données prédéfinies : scalaire et composé.
Les types scalaires :
Binary_integer entiers
Number numérique
Positive entiers positifs
Natural entiers naturels
Decimal, float, integer, real sous-types de number
Char chaîne de caractères à taille fixe allant jusqu’à 32 767 caractère (au
lieu de 255 dans la définition des colonnes des tables)
Varchar2 chaîne de caractères de longueur variable allant jusqu’à 32 767 (au
lieu de 2000 dans la définition des colonnes des tables)
Boolean booléen ses valeurs possibles sont TRUE, FALSE, NULL
Date type date d’Oracle
Rowid type interne à Oracle composé de 6 octets qui permet d’identifier une
ligne unique d’une table et d’offrir un accès rapide aux données.

Les types Composés :


Record c’est le type enregistrement
Table c’est le type tableau

III.2 Variables et constantes

La déclaration d'une variable consiste à allouer un espace pour stocker et modifier une valeur.
Elle est typée et peut recevoir une valeur par défaut et/ou un statut NOT NULL.
Une constante est par contre, ne peut pas être modifié par l'utilisateur.

III.2.1 Déclaration

Les variables se définissent dans la partie DECLARE, du bloc PL/SQL en utilisant la syntaxe suivante :

Syntaxe :

8
Chap. 1 : Le langage PL/SQL

nomvariable [CONSTANT]
{type | variable%TYPE | colonne_de_table.%ROWTYPE}
[NOT NULL]
[{ :=|DEFAULT} expression PL/SQL]
Remarques :
L'attribut CONSTANT permet de figer l'affectation d'une variable.
L'attribut Not NULL rend obligatoire d'initialiser la variable lors de sa définition.
On peut faire référence à une colonne d'une table par la déclaration :
nom_variable TABLE.COLONNE%TYPE
On peut faire référence à une ligne d'une table par la déclaration :
nom_variable TABLE%ROWTYPE
On peut faire référence à une variable précédemment définie par l'instruction :
nom_variable Pnom_variable%TYPE
L'initialisation d'une variable se fait par l'opérateur « := » suivi :
- d'une constante,
- d'une expression PL/SQL,
- d'une fonction PL/SQL.
Les variables peuvent également être définies dans l'environnement extérieur au bloc PL/SQL par
exemple comme des champs de l'écran en Form Builder. Ces variables seront utilisées préfixées de « : ».
Exemples de déclaration de variables :
Total NUMBER(9,3);
Nom CHAR(4) := ‘ISET’;
Longeur NUMBER NOT NULL := LENGTH (Nom)*2;
Date_Création DATE;
Numéro EMPLOYE.EMPNO%TYPE;
Dpt DEPARTEMENT%ROWTYPE;
Prénom Nom%TYPE;
Pi CONSTANT NUMBER:= 3.14;

III.2.2 L’affectation des variables

Deux possibilités d’affectation ou d’assignement sont disponibles :


- par l'opérateur d'affectation : « := »
- par la clause : « Select ... Into … »
La difficulté dans l'utilisation de la clause « Select » résulte du nombre de lignes ou d'occurrences
retourné.
Si le « Select » retourne une et une seule valeur, l'affectation s'effectue correctement. Par contre, si le
SELECT ne retourne aucune ligne, l’erreur PL/SQL « NO_DATA_FOUND » sera générée.
Si le SELECT retourne plusieurs lignes : l’erreur « TOO_MANY_ROWS » sera générée.

III.2.3 Les tableaux en PL/SQL

Les tableaux sont conçus comme les tables de la base de données. Ils possèdent une clé primaire
(index) pour accéder aux lignes du tableau.

9
Chap. 1 : Le langage PL/SQL

Un tableau, comme une table, ne possède pas de limite de taille. De cette façon, le nombre d'éléments
d'un tableau va croître dynamiquement.

III.2.3.1 La déclaration d'un tableau


Les tableaux PL/SQL doivent être déclarés en deux étapes :
1. Déclaration du type de la table,
2. Déclaration d’une table de ce type.
On peut déclarer un type TABLE dans la partie déclarative d'un bloc ou d'un sous-programme en utilisant
la syntaxe suivante :
TYPE nom_type IS TABLE OF
{typecolonne | variable%TYPE | table.colonne%TYPE} [NOT NULL]
INDEX BY BINARY_INTEGER ;
Lorsque le type est déclaré, on peut déclarer des tableaux de ce type de la façon suivante :
Nom_tab nom_type ;

III.2.3.2 L'accès aux éléments d'un tableau :


Pour accéder à un élément du tableau, on doit spécifier une valeur de clé primaire en respectant la
syntaxe suivante :
Nom_tab(valeur_clé_primaire) ;
Où valeur_clé_primaire : doit être du type BINARY_INTEGER
Pour affecter la valeur d'une expression PL/SQL à un élément du tableau, on doit utiliser la syntaxe
suivante :
nom_tab(valeur_clé_primaire) := expression_pl/sql ;
Exemple :
DECLARE
TYPE nom_tab_type IS TABLE OF CHAR(25) INDEX BY BINARY_INTEGER;

tab_nom nom_tab_type ;
BEGIN

tab_nom(1) := 'TUNISIE';

END;

III.2.4 Les enregistrements

III.2.4.1 Les enregistrements prédéfinis (record PL/SOL)


PL/SQL offre la déclaration d’une variable de type enregistrement prédéfinit par le biais du mot clé
%ROWTYP.
L'implémentation du type composé nommé RECORD a permis de définir un enregistrement explicite.

III.2.4.2 La déclaration d'un enregistrement


Comme les tableaux PL/SQL, la déclaration d'un enregistrement se fait en deux étapes :
1. Déclaration du type de l'enregistrement

10
Chap. 1 : Le langage PL/SQL

2. Déclaration de la variable du type défini.


On peut déclarer un Type RECORD dans la partie déclarative d'un bloc ou d'un sous programme en
utilisant la syntaxe suivante :
TYPE nom_type IS RECORD
(champ {type_champ | table.colonne%TYPE [NOT NULL],
champ (type_champ | table.colonne%TYPE [NOT NULL],...)
Où :
- nomtype : utilisé ensuite dans la déclaration des enregistrements PL/SQL.
- type-champ : type de données comme CHAR, DATE ou NUMBER.
Lorsque le type est déclaré, on peut déclarer des enregistrements de ce type de la façon suivante :
Nom_erg nom_type ;

III.2.4.3 L'accès aux champs d'un enregistrement


Pour accéder à un élément d'une variable de type RECORD, il suffit d'utiliser la syntaxe suivante :
Nom_erg.nom_champ
Pour affecter la valeur d'une expression PL/SQL à un élément de l'enregistrement, on doit utiliser la
syntaxe suivante :
Nom_erg.nom_champ := expression_pl/sql;
Exemple :
DECLARE
TYPE ADRESSE IS RECORD
(Numero positive,
Rue varchar2(35),
CodePost char(5),
Ville varchar2(25),
Pays varchar2(30) );
TYPE CLIENT IS RECORD
(NumCIi positive,
NomCli varchar2(40),
Adrcli ADRESSE,
CA number(12,3));
monclient CLIENT ;
BEGIN
monclient.NumCIi := 1234;
monclient.NomCIi := ‘Ben HUSSEIN’;
monclient.AdrCli.Numero := 10;
END ;

IV. LES COMMENTAIRES


Deux délimiteurs de commentaires sont offerts par PL/SQL :
- Commentaire sur une seule ligne : via « -- »
- Commentaire sur plusieurs lignes : via « /* … */ »
Un bloc de commentaire peut être placé à n’importe quel endroit du code PL/SQL.

11

Vous aimerez peut-être aussi