PLSQLchap2
PLSQLchap2
PLSQLchap2
PL/SQL
CHAPITRE2: PL/SQL
PROCEDURAL LANGUAGE/SQL
Asma ELADEL
[email protected]
A.U: 2021/2022
PL/SQL
2
Asma ELADEL
PL/SQL
4
Asma ELADEL
PL/SQL
5
Asma ELADEL
PL/SQL
6
3. Gestion de curseurs
Instructions DECLARE, OPEN, FETCH, CLOSE
4. Gestion des erreurs
Gestion standard des erreurs par ORACLE
Définition et gestion de traitements d'erreurs propres
au développeur
5. PL/SQL dans le monde ORACLE
Disponible dans les outils de développement
ORACLE*FORMS, SQL*plus, ...
Définition de Curseurs, de triggers, de procédures
stockées.
Asma ELADEL
Les blocs PL/SQL
7
Asma ELADEL
Structure d'un bloc PL/SQL
8
DECLARE
/* Déclaration des variables, des types, des curseurs,
fonctions et procédures */
BEGIN
/* Instructions PL/SQL ; tout instruction est terminée
par ; */
EXCEPTION
/* Traitement des erreurs */
END;
Asma ELADEL
Structure d'un bloc PL/SQL
9
Asma ELADEL
Bloc PL/SQL: Déclaration
10
1. Section déclaration
Dans cette section, on déclare toutes les variables
nécessaires à l’exécution du programme PL/SQL.
Section facultative
Commence par le mot clé DECLARE
Asma ELADEL
Bloc PL/SQL: Déclaration
11
Asma ELADEL
Bloc PL/SQL: Déclaration
12
Asma ELADEL
Bloc PL/SQL: Déclaration
13
Type de variables
Scalaires : reçoivent une seule valeur
Composées: permettent de définir des groupes de champs et de les
manipuler dans des blocs PL/SQL (tels que les records) et Table.
Asma ELADEL
Bloc PL/SQL: Types de variables
14
Asma ELADEL
Bloc PL/SQL: Types de variables
15
Asma ELADEL
Bloc PL/SQL: Déclaration
16
Types PL/SQL
BOOLEAN, SMALLINT, BINARY_INTEGER,
DECIMAL, FLOAT, INTEGER, REAL, ROWID
Asma ELADEL
Bloc PL/SQL: Déclaration des variables scalaires
17
Variables ou constantes
Exemple: DECLARE
Nom_duclient char (30);
X number:=12;
Y number:=X*X;
x VARCHAR2(10);
PI constant number(7,5):=3.14159 ;
Asma ELADEL
Bloc PL/SQL: Déclaration des variables scalaires
18
Variables ou constantes
Nom-variable nom-table.nom-attribut%TYPE;
Exemple :
film exemplaire.numFilm%TYPE;
Asma ELADEL
Bloc PL/SQL: Déclaration %TYPE
19
Variables %TYPE
Syntaxe
Nom_var [CONSTANT] Identifiant%TYPE [NOT NULL]
[ :=expr_pl/sql] ;
Exemples
V_COMPT COMPTEUR%TYPE;
V_NOMP PRIX.NOMP%TYPE;
Asma ELADEL
Bloc PL/SQL: Déclaration %TYPE
20
Exemple
DECLARE
v_last_name s_emp.last_name%TYPE;
v_first_name s_emp.first_name%TYPE;
v_balance NUMBER( 7, 2 );
v_minimum_balance v_balance%TYPE := 10;
Asma ELADEL
Bloc PL/SQL: Déclaration pour un
enregistrement %ROWTYPE
21
Variables %ROWTYPE
Syntaxe
Nom_var [CONSTANT] Identifiant%ROWTYPE [NOT NULL] [ :=expr_pl/sql] ;
Asma ELADEL
Bloc PL/SQL: Déclaration %ROWTYPE
22
DECLARE
dept_record s_dept%ROWTYPE;
emp_record s_emp%ROWTYPE;
Asma ELADEL
Bloc PL/SQL: Déclaration %ROWTYPE
23
Exemples
DECLARE
agent employe%ROWTYPE -- employe est la table employe de la base.
Asma ELADEL
Bloc PL/SQL: Déclaration pour une Table
25
Deux étapes :
• Déclaration du type de l’élément de la table
• Déclaration de la variable de type table
Asma ELADEL
Bloc PL/SQL: Déclaration pour une Table
26
Asma ELADEL
Exemple de déclaration pour une Table
27
DECLARE
TYPE tabNom IS TABLE OF VARCHAR2(20)
INDEX BY BINARY_INTEGER;
tableNom tabNom;
i BINARY_INTEGER;
BEGIN
tableNom(5) := 'Dupont';
i := 10;
tableNom(i) := 'Dupond';
END;
/
Asma ELADEL
Bloc PL/SQL: Déclaration des Curseurs
28
Variables Curseur
DECLARE
NumeroNUMBER(4);
nom VARCHAR2(30);
Salaire NUMBER(8,2);
Date_naissanceDATE;
// assignation de valeur
AugmentatationNUMBER (4) := 5;
Groupe VARCHAR2(10) := ‘groupe1’;
// utilisation du %TYPE. Permet de déclarer des variable de même
type que des variables déjà déclarée.
Numero_Client yacoubsa.clients.numclient%type
permet de déclarer le numéro du client du même type que le
numclient de la table clients de l’usager yacoubsa.
Asma ELADEL
Exemple de déclaration
30
Salaire_MIN NUMBER(7,2);
Salaire_MAX Salaire_Min%TYPE;
Acteur VARCHAR2(30);
Realisateur Acteur%TYPE:=‘Spielberg’;
// on peut donner le type ROWTYPE lorsqu’il s’agit
de déclarer un enregistrement (une ligne).
Enregistrement etudiant%ROWTYPE
Asma ELADEL
Bloc PL/SQL: Affectation
31
Assignation (Suite)
Par l’opérateur d’affectation : :=
Nom_variable := expression ;
Exemple
X := 0 ;
Y := ( X+5) * Y ;
Par la clause SELECT….INTO
Exemple: DECLARE
Nom Dept.Dname%type ;
BEGIN
SELECT Dname INTO Nom
FROM Dept WHERE DeptNo=20
END;
Asma ELADEL
Bloc PL/SQL: Corps du bloc
32
Asma ELADEL
Bloc PL/SQL: Structures de contrôle
33
Structure alternative
Structure répétitives
Asma ELADEL
Structures alternatives
34
Asma ELADEL
Structures alternatives
35
Condition
< Opérande > < Opérateur > < Opérande >
Opérateurs utilisables
= ; ! = ; <> ; < ; <= ;>; >=
IS [NOT] NULL
[NOT] BETWEEN …. AND
[NOT] IN
[NOT] LIKE
AND,OR,NOT
Asma ELADEL
Structures alternatives: Exemple 1
36
Asma ELADEL
Structures alternatives: Exemple 2
37
Asma ELADEL
IF –END IF
38
Asma ELADEL
CASE ---WHEN
39
CASE CHOIX
WHEN 1 THEN INSERT INTO employes(salaire )VALUES (44,28000);
WHEN 2 THEN UPDATE employes SET salaire = salaire +10
where numemp=10;
ELSE dbms_output.put_line('pas bon choix');
END CASE;
END;
Asma ELADEL
CASE ---WHEN
40
Asma ELADEL
Structures répétitives
41
Asma ELADEL
Structures répétitives
42
Asma ELADEL
Structures répétitives
43
Asma ELADEL
Structures répétitives: LOOP–EXIT WHEN–END LOOP
44
LOOP
…..
EXIT WHEN CONDITION ou EXIT
…..
END LOOP;
Asma ELADEL
Structures répétitives: Exemple
45
Asma ELADEL
Loop avec EXIT
46
Exemple
DECLARE
Credit NUMBER := 0;
BEGIN
LOOP
Credit:= Credit+ 1;
IF Credit> 3 THEN
EXIT; --on sort du loop
END IF;
END LOOP;
--pour afficher le résultat du looptout de suite
DBMS_OUTPUT.PUT_LINE ('Credit: ' || TO_CHAR(Credit));
END;
Asma ELADEL
Structures répétitives: FOR-IN-LOOP-END
47
Exemple
Asma ELADEL
Structures répétitives: FOR-IN-LOOP-END
48
BEGIN
FOR i IN 1..3 LOOP
DBMS_OUTPUT.PUT_LINE (TO_CHAR(i));
END LOOP;
END;
Asma ELADEL
Structures répétitives: While-LOOP
49
DECLARE
I NUMBER:=1;
BEGIN
WHILE I < 10 LOOP
I:= I+1;
DBMS_OUTPUT.PUT_LINE (TO_CHAR(I));
END LOOP;
END;
Asma ELADEL
NULL
50
Exemple:
IF I>=10 THEN
NULL
ELSE
INSERT INTO Dept VALUES ( 50, 'Marketing', 'Casa');
END IF ;
Asma ELADEL
Affichage
51
Asma ELADEL
Affichage: Exemple
52
set serveroutput on
DECLARE
i NUMBER;
BEGIN
FOR i IN 1..5 LOOP
dbms output.put line('Nombre : ' || i) ;
END LOOP ;
END ;
/
Si '/' seul sur une ligne : n d'une définition (déclenche
l‘évaluation).
Asma ELADEL
Affichage: Exemple
53
DECLARE
emp1 Employes%ROWTYPE; -- record basé sur la
structure d'une ligne de la table Eemployes;
BEGIN
SELECT * INTO emp1 FROM Employes WHERE Id=3;
Asma ELADEL
Les Exceptions
54
Facultative
Introduite par le mot clé EXCEPTION
Asma ELADEL
Les exceptions: Syntaxe
55
BEGIN
...
EXCEPTION
WHEN exception1 THEN
...
WHEN exception2 THEN
...
WHEN OTHERS THEN --optionnel
...
END;
Asma ELADEL
Les exceptions: Déclaration
56
DECLARE
Nom-exception EXCEPTION ;
...
BEGIN
...
Declenchement d'exceptions :
RAISE Nom-exception;
Asma ELADEL
Les Exceptions: Définition
57
Asma ELADEL
Les Exceptions: Traitement
58
Asma ELADEL
Exceptions prédéfinies
59
Exemple d'usage
Asma ELADEL
Exceptions utilisateur
60
Elles doivent être déclarées avec le type EXCEPTION.
On les lève avec l'instruction RAISE.
DECLARE
salaire NUMBER(8,2) ;
salaire trop bas EXCEPTION ;
BEGIN
select sal into salaire from emp where matr = 50 ;
IF salaire < 300 THEN
RAISE salaire trop bas ;
END IF ;
EXCEPTION
WHEN salaire trop bas THEN
dbms output.put line(`Salaire trop bas') ;
WHEN OTHERS THEN
dbms output.put line(SQLERRM) ;
END ;
Asma ELADEL
Exception: Exemple 1
61
Asma ELADEL
Les exceptions: Exemple1
62
Asma ELADEL
Les exceptions: Exemple 2
63
DECLARE EXCEPTION
WHEN NO_DATA_FOUND THEN
erreurEx EXCEPTION; DBMS_OUTPUT.PUT_LINE('numero
num exemplaire.numExemplaire inconnu');
%TYPE; WHEN erreurEx THEN
DBMS_OUTPUT.PUT_LINE(num || '
film exemplaire.numFilm%TYPE; probleme');
pb exemplaire.probleme%TYPE; END;
BEGIN /
Asma ELADEL