73
Objectifs du cours
1. Les Exceptions prédéfinies
2. Les Exceptions définies
3. Utilisation des exceptions dans des programmes PL/SQL
(Reconnaître les exceptions non gérées, répertorier et utiliser les
différents types de gestionnaire d'exceptions PL/SQL, intercepter les
erreurs non prédéfinies, personnaliser les messages d'exception PL/SQL
74
Définition des exceptions
La section EXCEPTION permet d'affecter un traitement aux erreurs survenues
lors de l'exécution d'un bloc PL/SQL. On distingue 2 types d'erreurs:
▪ erreurs internes du serveur Oracle
▪ erreurs programme utilisateur
▪ Exception prédéfinie Exception déclenchée
du serveur Oracle implicitement
▪ Exception non prédéfinie
du serveur Oracle
▪ Exception définie Exception déclenchée
par l'utilisateur explicitement
75
Traitement des exceptions
L'exception Interrompre
est-elle interceptée ? brutalement
Non l'exécution
Oui
Exception Exécuter les Propager
générée instructions
l'exception
de la section
EXCEPTION
Interrompre
correctement
l'exécution
76
Exception prédéfinie oracle.
Exemples d’exception prédéfinies internes du serveur oracle :
77
Exemple1 . Exception prédéfinie Oracle (1/2)
Var a number;
BEGIN
Select department_name into :a from departments;
END;
/
78
Exemple1 . Exception prédéfinie Oracle (2/2)
correction
BEGIN
Select department_name into :a from departments;
Exception
When too_many_rows then dbms_output.put_line(‘plusieurs
lignes’);
END;
/
79
Exemple2 . Exception prédéfinie Oracle (1/2)
DECLARE
b departments.department_name%type;
A number :=1;
BEGIN
Select department_name into b from departments where
department_id=a;
Dbms_output.put_line(b);
END;
/
80
Exemple2 . Exception prédéfinie Oracle (2/2)
correction
DECLARE
b departments.department_name%type; A number :=1;
BEGIN
Select department_name into b from departments where
department_id=a;
Dbms_output.put_line(b);
Exception
When no_data_found then dbms_output.put_line(‘pas de donées’);
END;
/
81
Exception définie oracle. Syntaxe
DECLARE
nom_erreur EXCEPTION ;
PRAGMA EXCEPTION_INIT(nom_erreur, sql_code_erreur);
BEGIN
EXCEPTION
WHEN nom_erreur THEN (traitement) ;
[WHEN OTHERS THEN (traitement) ;] ;
END;
/
82
Exception définie oracle. Exemple
SQL> create table org_level(
2 company_id number(8) not null,
3 org_level varchAR2(1) not null
4 );
SQL> DECLARE
2 test EXCEPTION;
3 PRAGMA EXCEPTION_INIT(test, +100);
4 BEGIN
5 select company_id into :a from or_level where org_level=‘test’;
6 EXCEPTION WHEN test THEN
7 dbms_output.put_line('Organization Level invalide ');
8 END;
9 /
83
Exception définie par l’utilisateur. Syntaxe
DECLARE
<déclarations>
1 Déclarer l’exception
nom_erreur EXCEPTION ;
BEGIN
<instructions>
IF (anomalie) THEN
RAISE nom_erreur ; 2 Évoquer l’exception
<instructions>
EXCEPTION
WHEN nom_erreur THEN (traitement) ;
3 Définir l’exception
END; /