Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
PL / SQL
Les exceptions
Ines BAKLOUTI
[email protected]
Ecole Supérieure Privée d’Ingénierie et de Technologies
Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
Plan
1 Les types d’exceptions
2 Les exceptions prédéfinies
3 Les exceptions définies par l’utilisateur
Redéclaration des exceptions prédéfinies
Déclencher des exceptions explicitement
4 Propagation des exceptions
2/22
Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
Introduction
Une exception est tout avertissement (warning) ou erreur détecté lors de
la compilation d’un bloc PL/SQL.
Les exceptions dûes au erreurs de compilation peuvent être levées à cause
de défauts syntaxiques, erreurs de codages, et plusieurs autres sources.
Vous ne pouvez pas anticiper toutes les exceptions possibles, mais vous
pouvez ecrire des gestionnaires d’exception qui permettent à votre
programme de continuer à fonctionner en leur présence.
Chaque bloc PL/SQL peut avoir une partie de gestion d’exception, qui
peut avoir un ou plusieurs gestionnaire d’exception.
3/22
Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
Introduction
4/22
Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
Plan
1 Les types d’exceptions
2 Les exceptions prédéfinies
3 Les exceptions définies par l’utilisateur
Redéclaration des exceptions prédéfinies
Déclencher des exceptions explicitement
4 Propagation des exceptions
5/22
Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
Les types d’exceptions
Exception prédéfinie: est une exception définie en interne par PL/SQL et est
levée implicitement par le serveur oracle. Par exemple: NO DATA FOUND,
TOO MANY ROWS, etc.
Exception définie par l’utilisateur: Vous pouvez déclarer vos propres exceptions
dans la partie déclarative d’un bloc PL / SQL anonyme, sous-programme
(procédure, fonction ou trigger), ou package.
Exception Possède code Possède un nom Levée Levée
erreur implicitement explicitement
Prédéfinie toujours toujours oui optionellement
Définie par seulement si vous toujours non toujours
l’utilisateur y accordez un
code
Les fonctions d’interception des exceptions:
SQLCODE : renvoie la valeur numérique du code d’erreur
SQLERRM : renvoie le message associé au code d’erreur
6/22
Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
Plan
1 Les types d’exceptions
2 Les exceptions prédéfinies
3 Les exceptions définies par l’utilisateur
Redéclaration des exceptions prédéfinies
Déclencher des exceptions explicitement
4 Propagation des exceptions
7/22
Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
Les exceptions prédéfinies
Syntaxe
DECLARE
/* déclarations */
BEGIN
/* traitements */
EXCEPTION
WHEN exception1 [OR exception2 . . .] THEN
statement1; statement2;
. . .
[WHEN exception3 [OR exception4 . . .] THEN
statement1; statement2;
. . .]
[WHEN OTHERS THEN
statement1; statement2;
. . .]
END;
8/22
Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
Les exceptions prédéfinies
Les exceptions prédéfinies les plus utilisées sont:
Nom de l’exception Code
NO DATA FOUND +100
TOO MANY ROWS -1422
ZERO DIVIDE -1476
DUP VAL ON INDEX -1
INVALID CURSOR -1001
CURSOR ALREADY OPEN -6511
INVALID NUMBER -1722
ROWTYPE MISMATCH -6504
9/22
Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
Les exceptions prédéfinies
Exemple 1
DECLARE
lname VARCHAR2(15);
BEGIN
SELECT last name INTO lname FROM employees
WHERE first name=’John’;
DBMS OUTPUT.PUT LINE (’Le nom de John est : ’ ||lname);
EXCEPTION
WHEN TOO MANY ROWS THEN
DBMS OUTPUT.PUT LINE (’La requête revoie plusieurs lignes, utilisez un
curseur’);
WHEN NO DATA FOUND THEN
DBMS OUTPUT.PUT LINE (’Aucun employé ne porte le prénom John’);
END;
10/22
Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
Les exceptions prédéfinies
Exemple 2
CREATE OR REPLACE PROCEDURE pr nom(prenom varchar2) IS
lname VARCHAR2(15);
BEGIN
SELECT last name INTO lname FROM employees
WHERE first name=prenom;
DBMS OUTPUT.PUT LINE (’Le nom de ’|| prenom||’ est : ’ ||lname);
EXCEPTION
WHEN TOO MANY ROWS THEN
DBMS OUTPUT.PUT LINE (’La requête revoie plusieurs lignes, utilisez un curseur’);
WHEN OTHERS THEN
ROLLBACK;
DBMS OUTPUT.PUT LINE(’code de l”erreur : ’||SQLCODE);
DBMS OUTPUT.PUT LINE(’message de l”erreur : ’||SQLERRM);
END;
11/22
Les types d’exceptions
Les exceptions prédéfinies Redéclaration des exceptions prédéfinies
Les exceptions définies par l’utilisateur Déclencher des exceptions explicitement
Propagation des exceptions
Plan
1 Les types d’exceptions
2 Les exceptions prédéfinies
3 Les exceptions définies par l’utilisateur
Redéclaration des exceptions prédéfinies
Déclencher des exceptions explicitement
4 Propagation des exceptions
12/22
Les types d’exceptions
Les exceptions prédéfinies Redéclaration des exceptions prédéfinies
Les exceptions définies par l’utilisateur Déclencher des exceptions explicitement
Propagation des exceptions
Redéclaration des exceptions prédéfinies
Exemple
DECLARE
a number:=100;
b number:=0;
division zero EXCEPTION;
PRAGMA EXCEPTION INIT(division zero,-01476);
BEGIN
a:=a/b;
EXCEPTION
WHEN division zero THEN
DBMS OUTPUT.PUT LINE(’ERREUR: Division par 0’);
END;
13/22
Les types d’exceptions
Les exceptions prédéfinies Redéclaration des exceptions prédéfinies
Les exceptions définies par l’utilisateur Déclencher des exceptions explicitement
Propagation des exceptions
Déclencher des exceptions explicitement
14/22
Les types d’exceptions
Les exceptions prédéfinies Redéclaration des exceptions prédéfinies
Les exceptions définies par l’utilisateur Déclencher des exceptions explicitement
Propagation des exceptions
Avec le mot clé RAISE
Syntaxe
DECLARE
exception name EXCEPTION; – déclarer l’exception
[PRAGMA EXCEPTION INIT(exception name,error code)];
...
BEGIN
...
RAISE exception name; – déclencher l’exception
EXCEPTION
WHEN exception name THEN – gérer l’exception
– traitement;
. . .
END;
15/22
Les types d’exceptions
Les exceptions prédéfinies Redéclaration des exceptions prédéfinies
Les exceptions définies par l’utilisateur Déclencher des exceptions explicitement
Propagation des exceptions
Avec le mot clé RAISE
Exemple
CREATE OR REPLACE PROCEDURE pr check salary (current salary number) IS
salary too high EXCEPTION; – déclarer l’exception
PRAGMA EXCEPTION INIT(salary too high,-20100); – associer optionellement le code -20100
à l’exception
max salary NUMBER := 10000;
BEGIN
IF current salary > max salary THEN
RAISE salary too high; – déclencher l’exception
END IF;
EXCEPTION
WHEN salary too high THEN – gérer l’exception
DBMS OUTPUT.PUT LINE(’ERREUR : ’||SQLCODE);
DBMS OUTPUT.PUT LINE(’MESSAGE : ’||SQLERRM);
DBMS OUTPUT.PUT LINE(’Salaire ’||current salary||’ est très élevé’);
DBMS OUTPUT.PUT LINE (’Le salaire maximum est ’ || max salary);
END;
16/22
Les types d’exceptions
Les exceptions prédéfinies Redéclaration des exceptions prédéfinies
Les exceptions définies par l’utilisateur Déclencher des exceptions explicitement
Propagation des exceptions
Avec la procédure RAISE APPLICATION ERROR
Syntaxe
RAISE APPLICATION ERROR (error number, message);
Avec:
Error number représente un entier négatif compris entre -20000 et
-20999
message représente le texte du message d’erreur d’une longueur
maximum de 2048 octets
La procédure RAISE APPLICATION ERROR peut être utilisée à
deux endroits :
Section exécutable
Section de traitement des exceptions
17/22
Les types d’exceptions
Les exceptions prédéfinies Redéclaration des exceptions prédéfinies
Les exceptions définies par l’utilisateur Déclencher des exceptions explicitement
Propagation des exceptions
Avec la procédure RAISE APPLICATION ERROR
Exemple 1
BEGIN
DELETE FROM employees WHERE manager id = 500;
IF SQL%NOTFOUND THEN
RAISE APPLICATION ERROR(-20200, ’Numéro de manager non valide’);
END IF;
END;
Exemple 2
DECLARE
mgr id NUMBER;
BEGIN
SELECT manager id INTO mgr id FROM employees WHERE employee id=300;
EXCEPTION
WHEN NO DATA FOUND THEN
RAISE APPLICATION ERROR (-20999, ’Numéro d”employé non valide’);
END;
18/22
Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
Plan
1 Les types d’exceptions
2 Les exceptions prédéfinies
3 Les exceptions définies par l’utilisateur
Redéclaration des exceptions prédéfinies
Déclencher des exceptions explicitement
4 Propagation des exceptions
19/22
Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
Propagation des exceptions
Exemple 1
20/22
Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
Propagation des exceptions
Exemple 2
21/22
Les types d’exceptions
Les exceptions prédéfinies
Les exceptions définies par l’utilisateur
Propagation des exceptions
Propagation des exceptions
Exemple 3
22/22