Académique Documents
Professionnel Documents
Culture Documents
- partie 1 -
1
Le Langage de Bloc
PL/SQL
• PL/SQL:
–‘Procédural Language’ : est une sur-couche à SQL
+ boucles, contrôles, affectations,
exceptions, ….
2
Bloc PL/SQL
• Le bloc de requêtes est envoyé sur le serveur:
celui-ci exécute tout le bloc et renvoie un résultat
final.
CLIENT SERVEUR
BEGIN
INSERT … Exécution
SI ….
ALORS du bloc
SELECT …
FSI
PL/SQL
END; Résultat
3
Structure d’un bloc PL/SQL
• Section DECLARE : déclaration de DECLARE
– Variables locales simples
– Variables tableaux --déclarations
– …
• Section BEGIN BEGIN
– Section des ordres exécutables
– Ordres SQL --exécutions
– Ordres PL
• Section EXCEPTION
EXCEPTION
– Réception en cas d’erreur
– Exceptions SQL ou utilisateur --erreurs
END;
4 /
Structure d’un bloc PL/SQL
DECLARE optionnelle
Variables, ...
BEGIN obligatoire
Instructions SQL et PL/SQL
Possibilités de blocs fils (imbrication de blocs)
EXCEPTION optionnelle
Traitement des exceptions (gestion des erreurs)
END ; obligatoire
5
Exemple d’un bloc PL/SQL
DECLARE
var_x VARCHAR(5);
BEGIN
SELECT nom_colonne
INTO var_x
FROM nom_table
EXCEPTION
WHEN nom_exception THEN
......
END ;
/
6
Types PL/SQL et déclarations
Les types scalaires:
• PL/SQL supporte les types du langage SQL (CHAR, VARCHAR , NUMBER , DATE)
et offre des types supplémentaires pour déclarer des variables et des constantes :
Type Explication
BINARY_INTEGER Nombre entier compris entre -2 147 483 647 et +2 147 483 647
BOOLEN Une variable booléenne peut recevoir les valeurs TRUE, FALSE ou NULL
7
Evaluation des expressions
• L’ évaluation des expressions repose sur les règles de priorité
des opérateurs ci-dessous présentés de la plus haute vers la
plus faible priorité.
• L’usage des ( ) est autorisé pour imposer une priorité dans
l’évaluation d’une expression
Opérateur Opération
Haute ** , NOT Puissance, négation logique
AND ET logique
OR OU logique 8
Déclaration des variables en PL/SQL
Syntaxe:
Identificateur [CONSTANT] type_données [NOT NULL] [:= expression];
fin BOOLEAN ;
ok BOOLEAN := TRUE;
9
Affectation des variables en PL/SQL
Syntaxe:
Identificateur := expr;
Exemple:
Affecter la date de naissance
v_datenaissance := ’23-SEP-2004’;
10
Les directives
%TYPE
et
%ROWTYPE
11
La directive %TYPE
12
La directive %TYPE
Exemples:
• v_salaire est une variable de même type que la colonne salaire de la
table employe :
v_salaire employe.salaire%TYPE;
Exemples:
v_employe est une variable de même type qu'une ligne de la table employe :
v_employe employe%ROWTYPE;
14
Variables faisant référence aux tables
•Exemple d’une variable qui référence une ligne de table :
v_employe employe%ROWTYPE;
15
Exemple d’utilisation
v_employe employe%ROWTYPE ;
v_nom employe.name%TYPE ;
v_nom := v_employe.name;
…
v_employe.salaire := 2000;
Insert into employe values v_employe;
16
Le Type enregistrement :
RECORD
17
Type enregistrement (RECORD):
SELECT liste_colonnes
INTO { nom_var1 [, nom_var2] ……
| nom_record
}
FROM table
WHERE condition;
19
Exemple d’instruction SELECT dans PL/SQL
La clause INTO est obligatoire
DECLARE
v_departement_no NUMBER(2);
v_departement_adresse VARCHAR2(15);
BEGIN
SELECT deptno, adresse
INTO v_departement_no,
v_departement_adresse FROM departement
WHERE nom_dept =‘INFORMATIQUE’;
……
END;
20
Exemple d’instruction SELECT dans PL/SQL
calculer la somme des salaires de tous les
employés d’un département donné :
DECLARE
v_somme_salaires employe.salaire%TYPE;
v_departement_no NUMBER NOT NULL := 10;
BEGIN
SELECT sum (salaire) --fonction d’agrégat
INTO v_somme_salaires
FROM employe
WHERE deptno = v_departement_no;
END;
21
Insertion de données
Ajouter les informations d’un nouvel employé à la table employe
DECLARE
v_emp_no NUMBER NOT NULL := 105;
BEGIN
INSERT INTO employe (empno, emp_nom, deptno)
VALUES (v_emp_no, ‘TOUNSI’, 10);
END;
22
Mise à jour de données
DECLARE
v_augm_sal emp.salaire%TYPE := 200;
BEGIN
UPDATE employe
SET salaire = salaire + v_augm_sal
END;
23
Suppression de données
DECLARE
v_ deptno emp.deptno%TYPE := 10;
BEGIN
DELETE FROM emp
WHERE deptno = v_deptno;
END;
24
Affichage dans PL/SQL
25
Affichage utilisant
le Package DBMS_OUTPUT
Serveur ORACLE
Client SQL/PLUS BEGIN
DBMS_OUTPUT.PUT_LINE('Message1');
DBMS_OUTPUT.PUT_LINE('Message2');
Message1 DBMS_OUTPUT.PUT_LINE('Message3');
Message2 END;
Message3
Message1
Message2
Message3
SQL> SET SERVEROUT ON
Mémoire tampon
26
Les Structures de contrôle dans PL/SQL
• IF conditionnel
• Les boucles :
- LOOP …
- FOR …
- WHILE …
27
Instruction IF
28
Exemple IF-THEN-ELSE
Si le nom de l’employé est ‘Clément’,
alors attribuer le département n° 102,
sinon afficher le message ‘Employé inexistant’.
……
IF v_nom = ‘Clément’ THEN
v_deptno := 102;
…
ELSE
DBMS_OUTPUT.PUT_LINE(‘Employé inexistant’);
END IF;
……
29
Boucle de base (LOOP)
Syntaxe :
LOOP -- délimiteur
énoncé 1; -- énoncé
énoncé 2;
…….
EXIT [ WHEN condition]; -- énoncé EXIT
END LOOP; -- délimiteur
30
Exemple Boucle de base (LOOP)
Insérer 10 articles :
……
v_compteur NUMBER(2) := 1;
BEGIN
……
LOOP
INSERT INTO article VALUES (v_compteur, …, ... ...);
v_compteur := v_compteur + 1;
EXIT WHEN (v_compteur > 10);
END LOOP;
……
31
Boucle FOR
Syntaxe :
FOR indice IN [REVERSE] borne_inf .. Borne_sup LOOP
énoncé 1;
énoncé 2;
……..
END LOOP;
32
Boucle FOR
Insérer 10 articles indexés de 1 à 10 en utilisant la boucle FOR
Exemple:
……
BEGIN
……
FOR i IN 1 .. 10 LOOP
INSERT INTO article VALUES ( i , …., ... ...);
END LOOP;
……
33
Boucle WHILE
Syntaxe:
WHILE condition LOOP
énoncé 1;
énoncé 2; La condition est
…….. évaluée au début de
END LOOP; chaque itération.
34
Boucle WHILE
Exemple:
DECLARE
…
v_compteur NUMBER(2) := 1;
BEGIN
……
v_compteur := v_compteur + 1;
END LOOP;
……
35