SlideShare une entreprise Scribd logo
1  sur  21
Copyright  Oracle Corporation, 1998. All rights reserved.
8
Traitement des Exceptions
8-2 Copyright  Oracle Corporation, 1998. All rights reserved.
Objectifs
A la fin de ce chapitre, vous saurez :
• Définir des exceptions PL/SQL
• Reconnaître les exceptions non gérées
• Lister et utiliser les différents types de
traitements des exceptions PL/SQL
• Traiter les erreurs Oracle non pré-définies
• Décrire l'effet d'une propagation des erreurs
dans des blocs imbriqués
• Personnaliser les messages d’erreur PL/SQL
8-3 Copyright  Oracle Corporation, 1998. All rights reserved.
Manipuler les Exceptions en PL/SQL
• Qu’est-ce qu’une exception ?
– Un identifiant PL/SQL, de type erreur,
déclenché pendant l’exécution du bloc
• Comment est-elle déclenchée ?
– Implicitement, par une erreur Oracle
– Explicitement, par le programme
• Comment la traiter ?
– En l’interceptant dans le traitement des
exceptions
– En la propageant à l’environnement appelant
8-4 Copyright  Oracle Corporation, 1998. All rights reserved.
Traitement des Exceptions
Intercepter l’exception
DECLARE
BEGIN
END;
Exception
émise
EXCEPTION
Exception
interceptée
Propager l’exception
DECLARE
BEGIN
END;
Exception
émise
EXCEPTION
Exception non
interceptée
Exception propagée à
l’environnement appelant
8-5 Copyright  Oracle Corporation, 1998. All rights reserved.
Types d’Exceptions
• Exception Oracle Pré-définie
• Exception Oracle Non Pré-définie
• Exception définie par l’utilisateur
} Déclenchées
implicitement
Déclenchées
explicitement
8-6 Copyright  Oracle Corporation, 1998. All rights reserved.
Intercepter les Exceptions
EXCEPTION
WHEN exception1 [OR exception2 . . .] THEN
instruction1;
instruction2;
. . .
[WHEN exception3 [OR exception4 . . .] THEN
instruction1;
instruction2;
. . .]
[WHEN OTHERS THEN
instruction1;
instruction2;
. . .]
Syntaxe
8-7 Copyright  Oracle Corporation, 1998. All rights reserved.
Règles pour intercepter les
Exceptions
• WHEN OTHERS est la dernière clause.
• Le mot-clé EXCEPTION débute la
section de gestion des exceptions.
• Plusieurs Exceptions sont permises.
• Une seule exception est exécutée avant
de sortir d’un bloc.
8-8 Copyright  Oracle Corporation, 1998. All rights reserved.
Erreurs Oracle pré-définies
• Utiliser le nom standard à l’intérieur de
la section Exception.
• Exemple d’exceptions pré-définies :
– NO_DATA_FOUND
– TOO_MANY_ROWS
– INVALID_CURSOR
– ZERO_DIVIDE
– DUP_VAL_ON_INDEX
8-10 Copyright  Oracle Corporation, 1998. All rights reserved.
Exception pré-définie
BEGIN SELECT ... COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
instruction1;
instruction2;
WHEN TOO_MANY_ROWS THEN
instruction1;
WHEN OTHERS THEN
instruction1;
instruction2;
instruction3;
END;
Syntaxe
8-11 Copyright  Oracle Corporation, 1998. All rights reserved.
Erreurs Oracle non pré-définies
Déclarer
• Nommer
l’exception
Associer
• Coder le PRAGMA
EXCEPTION_INIT
Section DECLARE
Traiter
• Traiter
l’exception
déclenchée
Section
EXCEPTION
8-12 Copyright  Oracle Corporation, 1998. All rights reserved.
DECLARE
v_deptno dept.deptno%TYPE := &p_deptno;
BEGIN
DELETE FROM dept
WHERE deptno = v_deptno;
COMMIT;
EXCEPTION
WHEN THEN
DBMS_OUTPUT.PUT_LINE('Suppression Impossible du
dep:'||TO_CHAR(v_deptno)||'Employés existant ');
END;
Erreurs Oracle non pré-définies
Intercepter une erreur de violation de
contraintes (Erreur Oracle –2292)
e_emps_remaining EXCEPTION; 1
PRAGMA EXCEPTION_INIT (e_emps_remaining,-2292);
2
e_emps_remaining 3
8-13 Copyright  Oracle Corporation, 1998. All rights reserved.
Exceptions définies par
l’utilisateur
• Nommer
l’exception
Déclarer
Section
DECLARE
Déclencher
• Déclencher
explicitement
l’exception avec
RAISE
Section
EXECUTABLE
Traiter
• Traiter
l’exception
declenchée
Section
EXCEPTION
8-14 Copyright  Oracle Corporation, 1998. All rights reserved.
Exceptions définies par
l’utilisateur
DECLARE
BEGIN
UPDATE product
SET descrip = '&product_description'
WHERE prodid = &product_number;
IF SQL%NOTFOUND THEN
END IF;
COMMIT;
EXCEPTION
WHEN THEN
DBMS_OUTPUT.PUT_LINE('Numéro de produit invalide.');
END;
exemple
e_invalid_product EXCEPTION; 1
RAISE e_invalid_product; 2
e_invalid_product 3
8-15 Copyright  Oracle Corporation, 1998. All rights reserved.
Fonctions d’interception des
Erreurs
• SQLCODE
Renvoie la valeur numérique associé au
code de l’erreur
• SQLERRM
Renvoie le message associé au code de
l’erreur
8-16 Copyright  Oracle Corporation, 1998. All rights reserved.
Fonctions d’interception des
Erreurs
DECLARE
v_error_code NUMBER;
v_error_message VARCHAR2(255);
BEGIN
...
EXCEPTION
...
WHEN OTHERS THEN
ROLLBACK;
v_error_code := SQLCODE ;
v_error_message := SQLERRM ;
INSERT INTO erreurs VALUES(v_error_code,
v_error_message);
END;
exemple
SQLCODE
SQLERRM
8-17 Copyright  Oracle Corporation, 1998. All rights reserved.
Environnements appelants
SQL*Plus
Procedure
Builder
Oracle
Developer
Forms
Une application
du précompilateur
Un bloc PL/SQL
principal
Affiche le code erreur et le message à
l’écran
Affiche le code erreur et le message à
l’écran
Accède facilement au code et au
message d’erreur à l’aide des
fonctions ERROR_CODE et
ERROR_TEXT
Accède au code erreur grâce à la
structure de données SQLCA
Intercepte les exceptions dans la
section Exceptions des blocs maîtres
8-18 Copyright  Oracle Corporation, 1998. All rights reserved.
Propagations des Exceptions
BEGIN
SELECT ...
UPDATE ...
IF SQL%NOTFOUND THEN
RAISE e_no_rows;
END IF;
EXCEPTION
WHEN e_integrity THEN ...
WHEN e_no_rows THEN ...
END;
DECLARE
. . .
e_no_rows exception;
e_integrity exception;
PRAGMA EXCEPTION_INIT (e_integrity, -2292);
BEGIN
FOR c_record IN emp_cursor LOOP
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN . . .
WHEN TOO_MANY_ROWS THEN . . .
END;
Des sous-blocs
peuvent traiter une
exception ou la
transmettre à un bloc
de niveau supérieur.
BEGIN
SELECT ...
UPDATE ...
IF SQL%NOTFOUND THEN
RAISE e_no_rows;
END IF;
EXCEPTION
WHEN e_integrity THEN ...
WHEN e_no_rows THEN ...
END;
8-19 Copyright  Oracle Corporation, 1998. All rights reserved.
Procédure
RAISE_APPLICATION_ERROR
Syntaxe
• Cette procédure vous permet de délivrer
des messages d’erreur définis par
l’utilisateur à partir de sous-programmes
stockés
• Elle ne peut être appelée que durant
l’exécution d’un sous-programme stocké
dans la base de données
raise_application_error (error_number,
message[, {TRUE | FALSE}]);
8-20 Copyright  Oracle Corporation, 1998. All rights reserved.
Procédure
RAISE_APPLICATION_ERROR
• Elle peut être utilisée à deux endroits :
– Dans la Section Exécutable
– Dans le Section Exception
• Elle renvoie à l’utilisateur les conditions
de l’erreur de manière cohérente par
rapport aux erreurs du Serveur Oracle
8-21 Copyright  Oracle Corporation, 1998. All rights reserved.
Résumé
• Types d’Exceptions :
– Erreur Oracle Server pré-définie
– Erreur Oracle Server non pré-définie
– Erreur définie par l’utilisateur
• Interception des Exceptions
• Traitement des Exceptions :
– intercepter l’exception dans un bloc
PL/SQL.
– Propager l’exception.
8-22 Copyright  Oracle Corporation, 1998. All rights reserved.
Présentation de l’exercice
• Traiter des exceptions nommées
• Créer et faire référence à des
exceptions définies par l’utilisateur

Contenu connexe

Similaire à plsql-8.ppt

7 Programmation PL-SQL Oracle.pdf
7 Programmation PL-SQL Oracle.pdf7 Programmation PL-SQL Oracle.pdf
7 Programmation PL-SQL Oracle.pdf
user2023moi
 

Similaire à plsql-8.ppt (12)

trigger.pdf
trigger.pdftrigger.pdf
trigger.pdf
 
trigger.pptx
trigger.pptxtrigger.pptx
trigger.pptx
 
Les01.ppt
Les01.pptLes01.ppt
Les01.ppt
 
Les06.ppt
Les06.pptLes06.ppt
Les06.ppt
 
Introduction à pl/sql
Introduction à pl/sqlIntroduction à pl/sql
Introduction à pl/sql
 
Python chapitre 5.pdf
Python chapitre 5.pdfPython chapitre 5.pdf
Python chapitre 5.pdf
 
Les03.ppt
Les03.pptLes03.ppt
Les03.ppt
 
Pl/sql - interaction avec la base de données & structures de contrôle
Pl/sql  - interaction avec la base de données & structures de contrôlePl/sql  - interaction avec la base de données & structures de contrôle
Pl/sql - interaction avec la base de données & structures de contrôle
 
Chapitre 6 traitement des exceptions
Chapitre 6  traitement des exceptionsChapitre 6  traitement des exceptions
Chapitre 6 traitement des exceptions
 
7 Programmation PL-SQL Oracle.pdf
7 Programmation PL-SQL Oracle.pdf7 Programmation PL-SQL Oracle.pdf
7 Programmation PL-SQL Oracle.pdf
 
Java-3eme partie.pptx
Java-3eme partie.pptxJava-3eme partie.pptx
Java-3eme partie.pptx
 
Introduction a Java
Introduction a JavaIntroduction a Java
Introduction a Java
 

plsql-8.ppt

  • 1. Copyright  Oracle Corporation, 1998. All rights reserved. 8 Traitement des Exceptions
  • 2. 8-2 Copyright  Oracle Corporation, 1998. All rights reserved. Objectifs A la fin de ce chapitre, vous saurez : • Définir des exceptions PL/SQL • Reconnaître les exceptions non gérées • Lister et utiliser les différents types de traitements des exceptions PL/SQL • Traiter les erreurs Oracle non pré-définies • Décrire l'effet d'une propagation des erreurs dans des blocs imbriqués • Personnaliser les messages d’erreur PL/SQL
  • 3. 8-3 Copyright  Oracle Corporation, 1998. All rights reserved. Manipuler les Exceptions en PL/SQL • Qu’est-ce qu’une exception ? – Un identifiant PL/SQL, de type erreur, déclenché pendant l’exécution du bloc • Comment est-elle déclenchée ? – Implicitement, par une erreur Oracle – Explicitement, par le programme • Comment la traiter ? – En l’interceptant dans le traitement des exceptions – En la propageant à l’environnement appelant
  • 4. 8-4 Copyright  Oracle Corporation, 1998. All rights reserved. Traitement des Exceptions Intercepter l’exception DECLARE BEGIN END; Exception émise EXCEPTION Exception interceptée Propager l’exception DECLARE BEGIN END; Exception émise EXCEPTION Exception non interceptée Exception propagée à l’environnement appelant
  • 5. 8-5 Copyright  Oracle Corporation, 1998. All rights reserved. Types d’Exceptions • Exception Oracle Pré-définie • Exception Oracle Non Pré-définie • Exception définie par l’utilisateur } Déclenchées implicitement Déclenchées explicitement
  • 6. 8-6 Copyright  Oracle Corporation, 1998. All rights reserved. Intercepter les Exceptions EXCEPTION WHEN exception1 [OR exception2 . . .] THEN instruction1; instruction2; . . . [WHEN exception3 [OR exception4 . . .] THEN instruction1; instruction2; . . .] [WHEN OTHERS THEN instruction1; instruction2; . . .] Syntaxe
  • 7. 8-7 Copyright  Oracle Corporation, 1998. All rights reserved. Règles pour intercepter les Exceptions • WHEN OTHERS est la dernière clause. • Le mot-clé EXCEPTION débute la section de gestion des exceptions. • Plusieurs Exceptions sont permises. • Une seule exception est exécutée avant de sortir d’un bloc.
  • 8. 8-8 Copyright  Oracle Corporation, 1998. All rights reserved. Erreurs Oracle pré-définies • Utiliser le nom standard à l’intérieur de la section Exception. • Exemple d’exceptions pré-définies : – NO_DATA_FOUND – TOO_MANY_ROWS – INVALID_CURSOR – ZERO_DIVIDE – DUP_VAL_ON_INDEX
  • 9. 8-10 Copyright  Oracle Corporation, 1998. All rights reserved. Exception pré-définie BEGIN SELECT ... COMMIT; EXCEPTION WHEN NO_DATA_FOUND THEN instruction1; instruction2; WHEN TOO_MANY_ROWS THEN instruction1; WHEN OTHERS THEN instruction1; instruction2; instruction3; END; Syntaxe
  • 10. 8-11 Copyright  Oracle Corporation, 1998. All rights reserved. Erreurs Oracle non pré-définies Déclarer • Nommer l’exception Associer • Coder le PRAGMA EXCEPTION_INIT Section DECLARE Traiter • Traiter l’exception déclenchée Section EXCEPTION
  • 11. 8-12 Copyright  Oracle Corporation, 1998. All rights reserved. DECLARE v_deptno dept.deptno%TYPE := &p_deptno; BEGIN DELETE FROM dept WHERE deptno = v_deptno; COMMIT; EXCEPTION WHEN THEN DBMS_OUTPUT.PUT_LINE('Suppression Impossible du dep:'||TO_CHAR(v_deptno)||'Employés existant '); END; Erreurs Oracle non pré-définies Intercepter une erreur de violation de contraintes (Erreur Oracle –2292) e_emps_remaining EXCEPTION; 1 PRAGMA EXCEPTION_INIT (e_emps_remaining,-2292); 2 e_emps_remaining 3
  • 12. 8-13 Copyright  Oracle Corporation, 1998. All rights reserved. Exceptions définies par l’utilisateur • Nommer l’exception Déclarer Section DECLARE Déclencher • Déclencher explicitement l’exception avec RAISE Section EXECUTABLE Traiter • Traiter l’exception declenchée Section EXCEPTION
  • 13. 8-14 Copyright  Oracle Corporation, 1998. All rights reserved. Exceptions définies par l’utilisateur DECLARE BEGIN UPDATE product SET descrip = '&product_description' WHERE prodid = &product_number; IF SQL%NOTFOUND THEN END IF; COMMIT; EXCEPTION WHEN THEN DBMS_OUTPUT.PUT_LINE('Numéro de produit invalide.'); END; exemple e_invalid_product EXCEPTION; 1 RAISE e_invalid_product; 2 e_invalid_product 3
  • 14. 8-15 Copyright  Oracle Corporation, 1998. All rights reserved. Fonctions d’interception des Erreurs • SQLCODE Renvoie la valeur numérique associé au code de l’erreur • SQLERRM Renvoie le message associé au code de l’erreur
  • 15. 8-16 Copyright  Oracle Corporation, 1998. All rights reserved. Fonctions d’interception des Erreurs DECLARE v_error_code NUMBER; v_error_message VARCHAR2(255); BEGIN ... EXCEPTION ... WHEN OTHERS THEN ROLLBACK; v_error_code := SQLCODE ; v_error_message := SQLERRM ; INSERT INTO erreurs VALUES(v_error_code, v_error_message); END; exemple SQLCODE SQLERRM
  • 16. 8-17 Copyright  Oracle Corporation, 1998. All rights reserved. Environnements appelants SQL*Plus Procedure Builder Oracle Developer Forms Une application du précompilateur Un bloc PL/SQL principal Affiche le code erreur et le message à l’écran Affiche le code erreur et le message à l’écran Accède facilement au code et au message d’erreur à l’aide des fonctions ERROR_CODE et ERROR_TEXT Accède au code erreur grâce à la structure de données SQLCA Intercepte les exceptions dans la section Exceptions des blocs maîtres
  • 17. 8-18 Copyright  Oracle Corporation, 1998. All rights reserved. Propagations des Exceptions BEGIN SELECT ... UPDATE ... IF SQL%NOTFOUND THEN RAISE e_no_rows; END IF; EXCEPTION WHEN e_integrity THEN ... WHEN e_no_rows THEN ... END; DECLARE . . . e_no_rows exception; e_integrity exception; PRAGMA EXCEPTION_INIT (e_integrity, -2292); BEGIN FOR c_record IN emp_cursor LOOP END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN . . . WHEN TOO_MANY_ROWS THEN . . . END; Des sous-blocs peuvent traiter une exception ou la transmettre à un bloc de niveau supérieur. BEGIN SELECT ... UPDATE ... IF SQL%NOTFOUND THEN RAISE e_no_rows; END IF; EXCEPTION WHEN e_integrity THEN ... WHEN e_no_rows THEN ... END;
  • 18. 8-19 Copyright  Oracle Corporation, 1998. All rights reserved. Procédure RAISE_APPLICATION_ERROR Syntaxe • Cette procédure vous permet de délivrer des messages d’erreur définis par l’utilisateur à partir de sous-programmes stockés • Elle ne peut être appelée que durant l’exécution d’un sous-programme stocké dans la base de données raise_application_error (error_number, message[, {TRUE | FALSE}]);
  • 19. 8-20 Copyright  Oracle Corporation, 1998. All rights reserved. Procédure RAISE_APPLICATION_ERROR • Elle peut être utilisée à deux endroits : – Dans la Section Exécutable – Dans le Section Exception • Elle renvoie à l’utilisateur les conditions de l’erreur de manière cohérente par rapport aux erreurs du Serveur Oracle
  • 20. 8-21 Copyright  Oracle Corporation, 1998. All rights reserved. Résumé • Types d’Exceptions : – Erreur Oracle Server pré-définie – Erreur Oracle Server non pré-définie – Erreur définie par l’utilisateur • Interception des Exceptions • Traitement des Exceptions : – intercepter l’exception dans un bloc PL/SQL. – Propager l’exception.
  • 21. 8-22 Copyright  Oracle Corporation, 1998. All rights reserved. Présentation de l’exercice • Traiter des exceptions nommées • Créer et faire référence à des exceptions définies par l’utilisateur