heg haute école de gestion de neuchâtel gestionnaire d'exception procédures stockées pl/sql

37
heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

Upload: leonie-lecoeur

Post on 04-Apr-2015

113 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

hegHaute école de gestionde Neuchâtel

Gestionnaire d'exception

Procédures stockées PL/SQL

Page 2: Heg Haute école de gestion de 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

Page 3: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

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

Page 4: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

hegHaute école de gestionde Neuchâtel

1. Rappel théorique

Page 5: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

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

Page 6: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

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

Page 7: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

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

Page 8: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

hegHaute école de gestionde Neuchâtel

2. Fonctionnement du gestionnaire ERREURS

Page 9: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

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

Page 10: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

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

Page 11: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

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

Page 12: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

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)

Page 13: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

20/12/99 ErreursPLSQL V0-0 13

hegHaute école de gestionde Neuchâtel

Exemple d'appel de Err_Traite

Page 14: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

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)

Page 15: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

20/12/99 ErreursPLSQL V0-0 15

hegHaute école de gestionde Neuchâtel

Exemple d'appel de Err_Envoie

Page 16: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

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*/

Page 17: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

20/12/99 ErreursPLSQL V0-0 17

hegHaute école de gestionde Neuchâtel

Exemple d'erreur interne avec le client SQL*PLus

Page 18: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

20/12/99 ErreursPLSQL V0-0 18

hegHaute école de gestionde Neuchâtel

Exemple d'erreur du développeur avec le client SQL*PLus

Page 19: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

20/12/99 ErreursPLSQL V0-0 19

hegHaute école de gestionde Neuchâtel

Exemple d'erreur du développeur avec un client Web

Page 20: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

20/12/99 ErreursPLSQL V0-0 20

hegHaute école de gestionde Neuchâtel

Exemple d'erreur interne avec un client Web

Page 21: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

hegHaute école de gestionde Neuchâtel

3. Utilisation du gestionnaire ERREURS

Page 22: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

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

Page 23: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

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

Page 24: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

hegHaute école de gestionde Neuchâtel

4. Mémorisation

Page 25: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

20/12/99 ErreursPLSQL V0-0 25

hegHaute école de gestionde Neuchâtel

Vue de la journalisation

Page 26: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

20/12/99 ErreursPLSQL V0-0 26

hegHaute école de gestionde Neuchâtel

Structure de mémorisation

Page 27: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

hegHaute école de gestionde Neuchâtel

5. Fonctionnement interne

Page 28: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

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

Page 29: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

20/12/99 ErreursPLSQL V0-0 29

hegHaute école de gestionde Neuchâtel

Procédure Err_Traite

1

2

3

4

Page 30: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

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

Page 31: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

20/12/99 ErreursPLSQL V0-0 31

hegHaute école de gestionde Neuchâtel

Procédure Err_Envoie

Page 32: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

20/12/99 ErreursPLSQL V0-0 32

hegHaute école de gestionde Neuchâtel

Corps de la procédure Err_EnregNvle

Page 33: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

20/12/99 ErreursPLSQL V0-0 33

hegHaute école de gestionde Neuchâtel

Corps de la procédure Err_EnregAppel

Page 34: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

hegHaute école de gestionde Neuchâtel

6. Erreurs d'utilisation du gestionnaire

ERREURS

Page 35: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

20/12/99 ErreursPLSQL V0-0 35

hegHaute école de gestionde Neuchâtel

Instruction Null

Page 36: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

20/12/99 ErreursPLSQL V0-0 36

hegHaute école de gestionde Neuchâtel

Absence de section d'exception

Page 37: Heg Haute école de gestion de Neuchâtel Gestionnaire d'exception Procédures stockées PL/SQL

hegHaute école de gestionde Neuchâtel

7. Distribution et installation