Vous êtes sur la page 1sur 10

Exceptions

 Définition
 Fonctionnement
 Exemples

© Base de données Avancees / M.MOURCHID, 2022-2023

Exceptions

 PL/SQL permet de gérer les erreurs qui surviennent en cours d’exécution .


 Erreur = exception = événement qui interrompt le déroulement d ’un
exécutable.
 On distingue 2 types d’erreur ( exception ):
 Les erreurs internes d’ORACLE ( prédéfinies et non prédéfinies )
 Les anomalies déterminées par l’utilisateur.
 Fonctionnement: lorsqu’une exception est détectée, il y a:
 Arrêt de l’exécution du bloc,
 Branchement sur la section exception,
 Parcours des clauses WHEN jusqu’à la bonne,
 Exécution des instructions associées,
 Une fois le traitement de l’erreur terminé, c’est le bloc suivant qui est
effectué.

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 1
Gérer les exceptions

• PL/SQL permet de gérer les exceptions avec une structure de choix


EXCEPTION Possible de citer plusieurs exceptions

WHEN exception1 [OR exception2 . . . ] THEN


instructions;
[WHEN exception3 [OR exception4 . . .] THEN
instructions];
[WHEN OTHERS THEN
instructions];

WHEN . . . . . . . . . . . . Identifie une ou plusieurs exceptions

WHEN OTHERS . . . . Indique le traitement à effectuer si l’exception ne peut être


appréhendée par une des clauses WHEN
© Base de données Avancees / M.MOURCHID, 2022-2023

Exceptions: 2 types

 Exceptions définies par ORACLE


 Nommées par oracle
 Ex: NO_DATA_FOUND, TOO_MANY_ROWS,….
 Se déclenchent automatiquement.
 Nécessite de prévoir la prise en compte de l’erreur dans la section EXCEPTION.

 Exceptions définies par l’utilisateur


 Nommées par l’utilisateur.
 Arrêt de l’exécution du bloc.
 Sont déclenchées par une instruction du programme soit automatiquement (
PRAGMA).
 Nécessite de prévoir la prise en compte de l’erreur dans la section EXCEPTION.

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 2
Types d’exception
PL/SQL permet de gérer plusieurs types d’exception

Exception Description Indications

Prédéfinie par le Une des 20 erreurs


serveur Oracle les plus fréquentes Activation implicite
Non prédéfinie par le Toutes les autres
serveur Oracle erreurs Oracle Activation implicite

Définie par l ’utilisateur. Situation définie


comme anormale
par le développeur Activation explicite

© Base de données Avancees / M.MOURCHID, 2022-2023

Exceptions prédéfinies: exemple


Exemple:
DECALRE
SAL empl.salaire%type ;
BEGIN
Select salaire into SAL FROM employe ;
EXCEPTION
WHEN TOO_MANY_ROWS THEN
-- gérer erreur trop de lignes Interception de l’exception « aucune
WHEN NO_DATA_FOUND THEN ligne trouvée »
-- gérer erreur pas de ligne
WHEN OTHERS THEN Interception d’ autres exceptions
-- gérer toutes les autres erreurs
END;

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 3
Liste d’exceptions prédéfinies
PL/SQL permet d’utiliser plusieurs mots clé identifiant chaque exception prédéfinie

Nom Exception Numéro erreur Description

NO_DATA_FOUND ORA-01403 La SELECT ne ramène pas de ligne

TOO_MANY_ROWS ORA-01422 La SELECT ramène plus d’une ligne

INVALID_CURSOR ORA-01001 Opération sur un curseur invalide

ZERO_DIVIDE ORA-01476 Tentative de division par 0

DUP_VAL_ON_INDEX ORA-00001 Tentative d’insertion d’une valeur


présente dans une colonne ayant
un index unique

© Base de données Avancees / M.MOURCHID, 2022-2023

Exceptions prédéfinies: règles


La prise en compte des erreurs prédéfinies respecte des règles

DECLARE
Définition Ne rien définir dans le bloc PL/SQL

BEGIN
Déclenchement automatique sous le contrôle du serveur Oracle.
Déclenchement

EXCEPTION Utiliser le mot clé identifiant l’erreur dans la structure de choix


WHEN :
Interception NO_DATA_FOUND
TOO_MANY_ROWS
INVALID_CURSOR
ZERO_DIVIDE
---

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 4
Exceptions non prédéfinies - règles

La prise en compte des erreurs non prédéfinies respecte des règles


1/ Définir un nom pour l’exception
DECLARE
Définition Nom_d’exception EXCEPTION;

2/ Associer le nom de l’exception à un numéro d’erreur Oracle

Pseudo instruction PRAGMA EXCEPTION_INIT nom_d’exception;

BEGIN
Déclenchement automatique sous le contrôle du serveur Oracle
Déclenchement

EXCEPTION Utiliser le mot clé identifiant l’erreur dans la structure de choix :

Interception
WHEN nom_d’exception THEN - - -;

© Base de données Avancees / M.MOURCHID, 2022-2023

Exceptions non prédéfinies - exemple


DECLARE

s_enrg_fils EXCEPTION; Définition d’un nom d’exception

PRAGMA EXCEPTION_INIT Associe un nom d’erreur avec un numéro d’erreur ORACLE


(s_enrg_fils ,-2292);

BEGIN

- - -

EXCEPTION

WHEN s_enrg_fils THEN Prise en compte de l’erreur définie


Gérer l’erreur -2292 qui correspond
DBMS_OUTPUT.PUT_LINE('Contrainte à la violation d’une contrainte d’intégrité
d''intégrité non respectée'); référentielle.

END;/
© Base de données Avancees / M.MOURCHID, 2022-2023

Page 5
Exception définie par l’utilisateur: règles
La prise en compte des erreurs prédéfinies respecte des règles

DECLARE Définir un nom pour l’exception


Définition Nom_d’exception EXCEPTION;

BEGIN Déclenchement sous le contrôle du programme


Déclenchement RAISE Nom_d’exception;

EXCEPTION
Utiliser le mot clé identifiant l’erreur dans la structure de
Interception choix :

WHEN nom_d’exception THEN - - -;

© Base de données Avancees / M.MOURCHID, 2022-2023

Exception définie par l’utilisateur

 Déclaration d’une variable de type EXCEPTION dans la section


DECLARE
 Nom_exception EXCEPTION
 Définition du traitement associé
 WHEN Nom_exception THEN traitements ;

 Déclenchement:
RAISE Nom_exception ;

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 6
Exception définie par l’utilisateur

 Déclaration d’une variable de type EXCEPTION dans la section


DECLARE
 Nom_exception EXCEPTION
 Définition du traitement associé
 WHEN Nom_exception THEN traitements ;

 Déclenchement:
RAISE Nom_exception ;

© Base de données Avancees / M.MOURCHID, 2022-2023

Exception définie par l’utilisateur

DECLARE
…..
Nom_exception EXCEPTION;
BEGIN
Instructions ;
IF ( condition_erreur ) THEN RAISE Nom_exception ;
…………….
EXCEPTION
WHEN Nom_exception THEN traitements ;
END ;
Remarques:
 on sort du bloc après l’exécution du traitement d’erreur.
 Les règles de visibilité des exceptions sont les mêmes que celle des
variables.
© Base de données Avancees / M.MOURCHID, 2022-2023

Page 7
Propagation des exceptions

 Traitemet de la réference à une exception:


1. Le traitemet associé à l’exception est d’abord recherché
dans le bloc courant. Si l’exception n’est pas trouvée,
passer à l’étape 2:
2. Si un bloc superieur est trouvé, le traitement associé est
recherché ensuite dans ce bloc
3. Les étapes 1 et 2 sont repetées tant qu’il y a un bloc
superieur ou jusqu’à l’identification du traitement associé
à l’exception.

© Base de données Avancees / M.MOURCHID, 2022-2023

Exemple complet
Exemple:DECLARE
CURSOR employe_rabat IS
SELECT nomemp, sal FROM employe WHERE ville= ‘ Rabat’ ;
nom employe.nomemp%TYPE ;
salaire employe.sal %TYPE ;
ERR_salaire EXCEPTION ;
BEGIN
OPEN employe_rabat;
FTECH employe_rabat INTO nom, salaire ;
WHILE employe_rabat%found LOOP
IF salaire IS NULL THEN
RAISE ERR_salaire ;
…………………..
EXCEPTION
WHEN ERR_salaire THEN
INSERT INTO temp ( nomempl, ‘ salaire non définie’ ) ;
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(‘Pas d’employe');
END ;
© Base de données Avancees / M.MOURCHID, 2022-2023

Page 8
Exception "others "

 Exception prédéfinie porte le nom de others.


 Permet de traiter toute autre exception non prévue.
 Syntaxe : WHEN OTHERS THEN …
 Deux fonctions permettent de récupérer des informations sur
l’erreur oracle:
 Sqlcode: retourne une valeur numérique : numéro de l’erreur.
 Sqlerrm: renvoit le libellé de l’erreur.

© Base de données Avancees / M.MOURCHID, 2022-2023

Exemple complet
Exemple:DECLARE
salaire employe.sal %TYPE ;
SAL_nulle EXCEPTION ;
code number ;
message char (50);
BEGIN
SELECT sal INTO salaire from employe;
IF salaire= 0 THEN
RAISE SAL_nulle;
END IF
EXCEPTION
WHEN SAL_nulle THEN
-- gérer erreur salaire
WHEN TOO_MANY_ROWS THEN
-- gérer erreur trop de lignes
WHEN NO_DATA_FOUND THEN
-- gérer erreur pas de lignes
WHEN OTHERS THEN
-- gérer toutes les autres erreurs
code:= sqlcode ;
message:= sqlerrm ;
dbms_output.put_line ( ‘erreur: ‘ || code || message );
END ;

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 9
Fonction RAISE_APPLICATION_ERROR

Le programmeur peut declencher une erreur utilisateur anonyme par l’appel


explicite de la procedure RAISE_APPLICATION_ERROR.
Syntaxe d’appel:
RAISE_APPLICATION_ERROR ( code_erreur, message) ;

Code_erreur : code erreur renvoyé doit etre compris entre -20000 et -20999
Message: une chaine de caracteres qui comporte le message qui sera affiché
Nom_exception EXCEPTION;
BEGIN
RAISE_APPLICATION_ERROR ( -20000, ‘ exception utilisateur anonyme’) ;
END ;

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 10

Vous aimerez peut-être aussi