Vous êtes sur la page 1sur 8

Filière : licence professionnelle SITW Enseignante : C.

Bachtarzi
Cours : Oracle I Niveau : 2ème année

PROGRAMMER AVEC PL/SQL


1) objectifs de PL/SQL :

C’est un langage procédural de 3° génération. Il s’agit d’une extension du code SQL,


le langage standard d’accès aux bases de données relationnelles. PL/SQL offre des
fonctionnalités telles que l’encapsulation des données, le masquage des données ainsi
que l’orienté objet. Les instructions SQL de manipulation des données et d’interrogation
sont incluses dans des unités de code de type procédural.
PL/SQL permet d’exprimer des règles de gestion complexes sous forme de procédures
et de triggers.

1-1) Avantages de PL/SQL :

-intégration parfaite du SQL.


-performances améliorées.
-portabilité.
-facilité de programmation.
-développement de programmes modulaires.

1-2) Environnement PL/SQL :


(1)
Moteur PL/SQL
Bloc Bloc PL/SQL Pgm d’exécution
PL/SQL PL/SQL PL/SQL
SQL

Moteur d’exécution (2)


SQL
Serveur ORACLE

(1) : Chargé d’exécuter les instructions procédurales.


(2) : Chargé d’exécuter les instructions SQL.
FIG (3-1)

Les blocs PL/SQL sont envoyés à un moteur PL/SQL en vue d’un traitement. Celui-ci
peut résider dans l’outil ou dans le serveur ORACLE. Il sépare les instructions SQL
incorporées dans les blocs PL/SQL et les envoie individuellement au moteur
d’exécution SQL. La partie relative au traitement des instructions conditionnelles est
effectuée par le moteur PL/SQL

Pour envoyer un bloc de l’application au serveur ORACLE un seul transfert est


nécessaire. Il est possible de stocker le code PL/SQL dans le serveur ORACLE sous
forme de sous programmes, fonctions, triggers et packages, stockés dans la base et
pouvant être référencés par un grand nombre d’applications connectées à la base.

1
Filière : licence professionnelle SITW Enseignante : C. Bachtarzi
Cours : Oracle I Niveau : 2ème année

2) Syntaxe de PL/SQL :
PL/SQL est structuré en blocs. Un bloc peu contenir plusieurs sous blocs.
2-1) Structure d’un bloc :
DECLARE
…….
BEGIN
…..
EXCEPTION
…..
END ;

DECLARE (facultatif)
Variables, Curseurs, Constantes, Exceptions définies par l’utilisateur.
BEGIN (obligatoire)
- instructions SQL
- instructions PL/SQL
EXCEPTION (facultatif)
Actions à réaliser lorsque des erreurs se produisent
END ; (obligatoire)

Remarques :
 Toute instruction SQL, ou instruction de contrôle PL/SQL se termine par « ; ».
 Lorsque le bloc est exécuté avec succès, le message suivant doit être envoyé :
« PL/SQL procédure successfully completed ».
 Il est possible de mettre plusieurs instructions à la suite sur une même ligne.
 En PL/SQL, une erreur se nomme une exception

Types de blocs :

- Blocs anonymes : sans nom, déclarés dans une application à l’endroit ou ils
doivent être exécutés. Les déclencheurs (Triggers) sont constitués de tels blocs.
- Procédures : sous programme nommé, peut être paramétré et appelé. Permet
de réaliser une action.
- Fonctions : autre type de sous programme. La fonction sert à calculer une
valeur.

Anonyme Procédure Fonction

[DECLARE] procedure name Function name


BEGIN IS Return data-type
… BEGIN IS BEGIN
Instructions … instructions
… Instructions Return value
[Exception] [Exception] [EXCEPTION]
END; END; END;

2
Filière : licence professionnelle SITW Enseignante : C. Bachtarzi
Cours : Oracle I Niveau : 2ème année
2-2) Les variables PL/SQL:

PL/SQL permet de déclarer des variables et de les utiliser dans toutes les
instructions ; elles peuvent servir à stocker des valeurs temporaires lors des calculs et
peuvent être réutilisées autant de fois que nécessaire.

2-2-1) Les types de variables :


1-variables PL/SQL :
-scalaires
-composite
-référencées
-LOB (large objet)

2-variables non PL/SQL


-variables de substitution
-variables hôte (attachée)

Scalaires : destinés à recevoir une seule valeur tel : entier, booléen, etc.…..
Composite : comporte des types de données, exemple : enregistrement.
Référencés : destinés à recevoir des valeurs de type pointeur
LOB : contiennent l’adresse d’éléments volumineux stockés à l’intérieur des tables exp :
des images, du son, des vidéos,…..etc.

2-2-2) Syntaxe de déclaration :


DECLARE
identifiant [CONSTANT] type de données [NOT NULL]
[ := | DEFAULT expression] ;

-toute variable doit être déclarée dans la partie déclarative avant d’être référencée.
-identifiant : nom de variable ; ne dépasse pas 30 caractères, le 1er caractère doit être une
lettre.
-CONSTANT : si présente, empêche toute modification de la valeur de la variable.
Les constantes doivent être initialisées.
-NOT NULL : si présente, indique que la variable doit obligatoirement avoir une valeur.
Ce type de variables doit être initialisé.
-expression : une variable, une expression littérale ou arithmétique.

Remarques :
- Deux objets ne portent le même nom que s’ils sont dans des blocs différents.
- Ne jamais utiliser le même nom pour designer une variable et une colonne de
table .Dans ce cas le serveur ORACLE considère que c’est la colonne qui est
référencée.
* il est préférable d’utiliser la convention suivante :
v_identificateur : pour désigner une variable.
c_identificateur : pour designer une constante.

- L’initialisation d’une variable se fait par :


-l’opérateur d’affectation (:=).
-mot DEFAULT.
-contrainte NOT NULL.

3
Filière : licence professionnelle SITW Enseignante : C. Bachtarzi
Cours : Oracle I Niveau : 2ème année

Type de données scalaire :


 CHAR [(longueur max)] : désigne une chaîne de caractères de longueur
finie ;par défaut la longueur est 1.
 Varchar2 (longueur-max) : chaîne de caractères de longueur variable jusqu’à
32767 octets.
 LONG : chaîne de caractères de longueur variable allant jusqu’à 32760 octets.
 NUMBER [(précision, scale)].
 BINARY-INTEGER : entiers.
 BOOLEAN : type logique acceptant comme valeurs True, False ou NULL.
 DATE : type pour les dates et les heures.
-Attribut %TYPE : il est possible de déclarer une variable par rapport à une autre
variable déclarée ultérieurement ou par rapport à une colonne de base de données.

Syntaxe :
Identifiant Table.colonne /variable % TYPE ;

Exemple :
V-nombre Number (7,2) ;
V-min-nombre V-nombre % TYPE := 10 ;

Syntaxe et remarques relatives aux blocs PL/SQL :


Les règles de syntaxe du code SQL sont valables en PL/SQL. Une ligne en PL/SQL
contient des ensembles de caractères nommées unités lexicales de différentes sortes :
- Délimiteurs : symboles simples ou composés.
- Identificateurs : incluent les mots réservés.
- Littéraux.
- Commentaires.

Remarques :
- Il est possible de séparer les unités lexicales par des espaces, mais non permis
d’intégrer des espaces dans les unités lexicales.
- Les identificateurs adjacents doivent être séparés par un espace ou un signe de
ponctuation.
- Les instructions peuvent s’étendre sur plusieurs lignes mais les mots-clés ne
doivent pas être scindés.

Délimiteurs :
Symboles simples :
Symbole Signification
+ Opérateur d’addition
- Opérateur de soustraction
* Opérateur de multiplication
/ Opérateur de division
= Opérateur relationnel
@ Indicateur d’accès distant
; Indicateur de fin d’instruction

4
Filière : licence professionnelle SITW Enseignante : C. Bachtarzi
Cours : Oracle I Niveau : 2ème année

Symboles composés :

Symbole Signification
<> Opérateur relationnel
!= Opérateur relationnel
|| Opérateur de concaténation
-- Indicateur de commentaire mono-ligne
/* Délimiteur de début de commentaire
*/ Délimiteur de fin de commentaire
:= Opérateur d’affectation

Identificateurs :
Permettent de nommer les éléments tels que variables, constantes, curseurs, sous-
programmes, etc.…..
La longueur maximale est de 30 caractères dont le premier est une lettre alphabétique.
Les caractères peuvent être des valeurs numériques, des traits de soulignement ainsi que
les symboles dollar et dièse.
Les identificateurs ne doivent pas correspondre à des mots réservés ou au nom d’une
colonne de table de base.

Littéraux :
Ce sont des valeurs de type numérique, chaîne ou booléen qui ne sont pas représentés
par des identificateurs.
- Littéral numérique : représenté par la valeur -401,3.
- Littéral caractère et date : mis entre apostrophes.
Commentaires :
Les commentaires sont parfois très utiles pour faciliter la lecture du code.
-- : Précéder le commentaire par ce symbole s’il tient sur une seule ligne.
/* et */ : Si le commentaire s’étend sur plusieurs lignes, le placer entre ces
deux symboles.

Portée des variables :


Définition : La portée d’une variable représente l’ensemble des emplacements à partir
desquels il est possible de la référencer.
 Il est possible de référencer une variable déclarée dans le même bloc et dans les
blocs englobants, mais jamais dans un bloc de même niveau.
 Une variable est dite locale dans le bloc où elle a été déclarée et globale dans les
blocs englobants.
 Il est possible de déclarer le même identificateur dans deux blocs différents. Il
s’agira de deux variables différentes. Dans le cas où les deux blocs sont
imbriqués, la référence concerne toujours la variable locale et non la globale.

Les structures de contrôle :


Elles permettent de gérer l’enchaînement logique des instructions et de contrôler leur
exécution.

5
Filière : licence professionnelle SITW Enseignante : C. Bachtarzi
Cours : Oracle I Niveau : 2ème année
1- Les structures conditionnelles : Semblables à celles des langages procéduraux,
elles permettent de changer le cours logique des instructions.
Les instructions IF sont de trois types :
• IF – THEN – END IF
• IF – THEN – ELSE – END IF
• IF- THEN – ELSIF – END IF

Syntaxe générale :
IF condition THEN
Instruction ;
[ ELSIF condition THEN
instructions ]
[ ELSE
instructions ; ]
END IF ;

Condition : variable ou expression booléenne pouvant renvoyer les résultats TRUE,


FALSE, ou NULL. Si le résultat est TRUE, les instructions après le THEN sont
exécutées.
Instructions : des instructions SQL ou PL/SQL, pouvant inclure d’autres IF.
ELSIF : Si le résultat de la 1ère condition est FALSE ou NULL, alors d’autres conditions
entrent en jeu après ce mot clé.

Dans le cas de plusieurs instructions IF imbriquées, chaque instruction IF doit se


terminer par un END IF.

Expression CASE :
Cette structure offre la possibilité de choisir entre plusieurs clauses possibles selon la
valeur d’une expression qu’on appelle sélecteur.

Syntaxe:

CASE sélecteur
WHEN expr1 THEN result1
WHEN expr2 THEN result2
. . . .
WHEN exprn THEN resultn
[ELSE result n+1;]
END;

Structures de contrôle d’itération :


Permettent de répéter un certain nombre de fois une séquence d’instructions. On en
distingue trois (3) formes.

Forme1 : LOOP
instructions ;
EXIT [WHEN condition;]
instructions
END LOOP;

6
Filière : licence professionnelle SITW Enseignante : C. Bachtarzi
Cours : Oracle I Niveau : 2ème année

Forme2: WHILE condition


LOOP
instructions;
END LOOP;

Forme3: FOR indice IN [REVERSE] m..M


LOOP
instructions;
END LOOP;
Remarques:
- L’indice est déclaré implicitement comme un entier.
- Toutes les boucles qu’on a vu peuvent être imbriquées les unes dans les autres.
- L’instruction EXIT permet de quitter la boucle interne ou la boucle externe en
faisant référence à son étiquette : « étiquette ».

Type de données composites :


Les variables composites permettent de regrouper des données de type différent.
Il existe deux catégories de variables composites :
-Les enregistrements : ensemble de données stockées dans des champs. Ces derniers
possèdent chacun un nom et un type.
-Les ensembles :
-Table INDEX BY
-Table imbriquée
-Varray.

 Les enregistrements :

Syntaxe de déclaration :
TYPE nom_type IS RECORD (déclaration champ1 [, déclaration champ2]………) ;
var nom-type ;

Déclaration champ :
nom-champ {type –champ / variable % Type/ table.colonne % Type / } [ [NOT NULL]
{ : = / DEFAULT } expression ]

Attribut % ROWTYPE :
Permet de déclarer un enregistrement à partir d’un ensemble de colonnes d’une table.

Exemple :
DECLARE
enreg-emp employé % ROWTYPE (enreg = toute une ligne de la table).

Tables INDEX BY :
Leur structure ressemble à celle des tables d’un B.D. mais elles sont différentes. Une
table INDEX BY se compose de :
- Une clé primaire qui sert d’index.
- Une colonne de type scalaire ou record.

7
Filière : licence professionnelle SITW Enseignante : C. Bachtarzi
Cours : Oracle I Niveau : 2ème année
Création d’une table INDEX BY :
TYPE nom-type IS TABLE OF
{type colonne / var % TYPE / table.colonne % TYPE /
table % ROWTYPE}
[INDEX BY BINARY-INTEGER];
identif nom-type;

Remarques:
- La clé est toujours de type BINARY-INTEGER et peut être négative.
- La clé INDEX BY a une taille dynamique.
- Toute table INDEX BY doit être initialisée par une instruction.

Les variables attachées :


Définition : Ce sont des variables créées à partir d’un environnement hôte (comme
SQL*Plus) et qui peuvent être référencées par un programme PL/SQL.

Ces variables peuvent être référencées par SQL, iSQL*Plus et PL/SQL.


Dans un programme PL/SQL, faire précéder le nom de la variable par deux points (:)
Résultat : Le salaire mensuel est 5000

Vous aimerez peut-être aussi