hegHaute école de gestionde Neuchâtel
Gestionnaire d'exception
Procédures stockées PL/SQL
20/12/99 ErreursPLSQL V0-0 2
hegHaute école de gestionde Neuchâtel
Têtes de chapitres
1. Rappel théorique 4
2. Fonctionnement du gestionnaire 8
3. Utilisation du gestionnaire 21
4. Mémorisation des erreurs 24
5. Fonctionnement interne 27
6. Erreurs d'utilisation du gestionnaire 34
7. Distribution et installation 37
20/12/99 ErreursPLSQL V0-0 3
hegHaute école de gestionde Neuchâtel
Table des matières• Rappel théorique 4• Fonctionnement du gestionnaire 8
– Principe de base 9
– Procédure Err_Traite(p,m) 11
– Création d'une exception 14
– Illustration du fonctionnement 16
• Utilisation du gestionnaire 21– Services du package ERREURS 22
– Bonne utilisation du package ERREURS 23
• Mémorisation 24• Fonctionnement interne 27
– Constantes et variables 28
– Procédure Err_Traite 29
– Procédure Err_Envoie 31
• Erreurs d'utilisation 34
– Instruction NULL 35
– Absence de section d'exception 36
• Distribution et installation 37
hegHaute école de gestionde Neuchâtel
1. Rappel théorique
20/12/99 ErreursPLSQL V0-0 5
hegHaute école de gestionde Neuchâtel
Rappel
PROCEDURE MaProcedureIS
/* Déclarations */
BEGIN
END;
/* Bloc d'instruction */
EXCEPTION
WHEN UneException THEN
/* Action spécifique à UneException */
WHEN OTHERS THEN
/* Action globale à toutes les exceptions non résolues */
Section d'exécution
Section d'exception
20/12/99 ErreursPLSQL V0-0 6
hegHaute école de gestionde Neuchâtel
Syntaxe
exc_MonException Exception;
RAISE exc_MonException;
EXCEPTION
WHEN exc_MonException THEN
WHEN OTHERS THEN
20/12/99 ErreursPLSQL V0-0 7
hegHaute école de gestionde Neuchâtel
BEGIN…RAISE_APPLICATION_ERROR (MonCode, MonMessage);...
EXCEPTIONWHEN ... THEN...
END;
RAISE_APPLICATION_ERROR
CLIENT -20145Le compte n'est pas suffisamment alimenté
Serveur
hegHaute école de gestionde Neuchâtel
2. Fonctionnement du gestionnaire ERREURS
20/12/99 ErreursPLSQL V0-0 9
hegHaute école de gestionde Neuchâtel
Principe de base
Une exception est une erreur interne du SGBD
ou de l'application qui provoque impérativement:
• L'annulation de toutes les opérations en cours
• L'arrêt impératif de tout traitement
• La remontée du message d'erreur à l'utilisateur
• L'enregistrement des paramètres de
l'environnement
20/12/99 ErreursPLSQL V0-0 10
hegHaute école de gestionde Neuchâtel
CLIENT
Résolution des exceptions
BEGIN CorpsEXCEPTION
WHEN OTHERS THENErr_Traite(p,m)
END;
BEGIN CorpsEXCEPTION
WHEN OTHERS THENErr_Traite(p,m)
END;
BEGIN CorpsEXCEPTION
WHEN OTHERS THENErr_Traite(p,m)
END;
A
B
C
Serveur
1
3
2
5
6
7
4
20/12/99 ErreursPLSQL V0-0 11
hegHaute école de gestionde Neuchâtel
Procédure Err_Traite (P, M)
Crée une nouvelle occurrence d'erreur
?Nouvelle occurrence
d'erreur
Enregistre le nom de la procédure dans
laquelle l'exception est résolue
Mémorise le message associé à l'exception
Propage l'exception
Début
Fin
Oui
Non
20/12/99 ErreursPLSQL V0-0 12
hegHaute école de gestionde Neuchâtel
Règle d'appel de Err_Traite
BEGIN Corps
END;
A
EXCEPTIONWHEN OTHERS THENErr_Traite(p,m)
BEGIN Corps
END;
B
EXCEPTIONWHEN OTHERS THENErr_Traite(p,m)
BEGIN Corps
END;
C
EXCEPTIONWHEN OTHERS THENErr_Traite(p,m)
20/12/99 ErreursPLSQL V0-0 13
hegHaute école de gestionde Neuchâtel
Exemple d'appel de Err_Traite
20/12/99 ErreursPLSQL V0-0 14
hegHaute école de gestionde Neuchâtel
Création d'une exception
BEGIN Début du Corps
Suite du corps
EXCEPTIONWHEN OTHERS THENErr_Traite(p,m)
END;
Err_Envoie(message)
20/12/99 ErreursPLSQL V0-0 15
hegHaute école de gestionde Neuchâtel
Exemple d'appel de Err_Envoie
20/12/99 ErreursPLSQL V0-0 16
hegHaute école de gestionde Neuchâtel
Illustration du fonctionnement
CLIENT
TestErreur1
TestErreur1A
TestErreur01
TestErreur001
/* Erreur développeur diviseur < 0 *//* Erreur interne diviseur = 0*/
20/12/99 ErreursPLSQL V0-0 17
hegHaute école de gestionde Neuchâtel
Exemple d'erreur interne avec le client SQL*PLus
20/12/99 ErreursPLSQL V0-0 18
hegHaute école de gestionde Neuchâtel
Exemple d'erreur du développeur avec le client SQL*PLus
20/12/99 ErreursPLSQL V0-0 19
hegHaute école de gestionde Neuchâtel
Exemple d'erreur du développeur avec un client Web
20/12/99 ErreursPLSQL V0-0 20
hegHaute école de gestionde Neuchâtel
Exemple d'erreur interne avec un client Web
hegHaute école de gestionde Neuchâtel
3. Utilisation du gestionnaire ERREURS
20/12/99 ErreursPLSQL V0-0 22
hegHaute école de gestionde Neuchâtel
Services du package ERREURS
Err_Traite ( pe_Package IN VARCHAR2, pe_Module IN VARCHAR2 )
Elle résout toutes les exceptions du module. Elle enregistre l'exception survenue et la renvoie à la procédure appelante.
pe_Package : Package qui contient la procédure à protéger
pe_Module : Nom de la fonction ou procédure protégée
Err_Envoie (pe_Message IN VARCHAR2 )
Elle crée une exception qui sera immédiatement résolue dans le bloc EXCEPTION par la procédure Err_Traite.
pe_Message : Message associé à l'erreur
20/12/99 ErreursPLSQL V0-0 23
hegHaute école de gestionde Neuchâtel
Bonne utilisation du package ERREURS
PROCEDURE MaProcedure IS
BEGIN
Début du Corps
Suite du corps
END;
Err_Envoie(message)
EXCEPTIONWHEN OTHERS THENErr_Traite(p,m)
Toujours
Seulement s' il est nécessaire pour le développeur de déclencher une erreur
hegHaute école de gestionde Neuchâtel
4. Mémorisation
20/12/99 ErreursPLSQL V0-0 25
hegHaute école de gestionde Neuchâtel
Vue de la journalisation
20/12/99 ErreursPLSQL V0-0 26
hegHaute école de gestionde Neuchâtel
Structure de mémorisation
hegHaute école de gestionde Neuchâtel
5. Fonctionnement interne
20/12/99 ErreursPLSQL V0-0 28
hegHaute école de gestionde Neuchâtel
Constantes et variables
co_ErrTransmise
co_ErrApplication
vg_NumErreur
vg_MessageInitial
vg_NumOrdreErreur
20/12/99 ErreursPLSQL V0-0 29
hegHaute école de gestionde Neuchâtel
Procédure Err_Traite
1
2
3
4
20/12/99 ErreursPLSQL V0-0 30
hegHaute école de gestionde Neuchâtel
Chronologie d'appels de Err_Traite
CLIENT
BEGIN CorpsEXCEPTION
WHEN OTHERS THENErr_Traite('P', 'A')
END;
BEGIN CorpsEXCEPTION
WHEN OTHERS THENErr_Traite('P', 'B')
END;
B21
4 3
P
vg_NumErreur := xvg_NumordreErreur := 1vg_MessgeInitial := SQLERRM +…...RAISE_APPLICATION_ERROR (co_ErrRetransmise, vg_MessageInitial)
vg_NumordreErreur := 2...RAISE_APPLICATION_ERROR (co_ErrRetransmise, vg_MessageInitial)
Chr
onol
ogie
de
dépi
lem
ent e
t d'
appe
l de
la p
rocé
dure
Err
_Tra
ite
20/12/99 ErreursPLSQL V0-0 31
hegHaute école de gestionde Neuchâtel
Procédure Err_Envoie
20/12/99 ErreursPLSQL V0-0 32
hegHaute école de gestionde Neuchâtel
Corps de la procédure Err_EnregNvle
20/12/99 ErreursPLSQL V0-0 33
hegHaute école de gestionde Neuchâtel
Corps de la procédure Err_EnregAppel
hegHaute école de gestionde Neuchâtel
6. Erreurs d'utilisation du gestionnaire
ERREURS
20/12/99 ErreursPLSQL V0-0 35
hegHaute école de gestionde Neuchâtel
Instruction Null
20/12/99 ErreursPLSQL V0-0 36
hegHaute école de gestionde Neuchâtel
Absence de section d'exception
hegHaute école de gestionde Neuchâtel
7. Distribution et installation