Traitement commun à toutes les exceptions
Bonjour !
J'ai à la fin de ma fonction PL tout un tas de traitements propres à chaque exception (principalement ecriture d'un message différent dans chaque cas dans un fichier de log)
J'aimerais réaliser pour toute ou partie des exception un traitement commun. J'aurais donc aimé savoir s'il existait une instruction qui permette de réaliser un traitement après les 'when', peu importe lequel ait été choisi.
J'ai pensé mettre ce traitement commun dans une fonction mais il y a enormement d'arguments à passer donc je voudrais savoir si de meilleures solutions existent.
On m'a évoqué une solution visant à ne mettre qu'une seule exception WHEN OTHERS, qui contiendrait elle-même un case qui gèrerait ensuite chaque exception, dans ce style :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| EXCEPTION
WHEN OTHERS THEN
BEGIN
-- Vidage tables d'import (il faut désactiver les foreign keys sinon on obtient une erreur)
EXECUTE IMMEDIATE 'ALTER TABLE IMPORT_TITRE_DIFFUSION
disable CONSTRAINT FK_IMPORT_TIT_DIFF_IMPORT_DIFF';
EXECUTE IMMEDIATE 'TRUNCATE TABLE IMPORT_TITRE_DIFFUSION';
EXECUTE IMMEDIATE 'TRUNCATE TABLE IMPORT_DIFFUSION';
EXECUTE IMMEDIATE 'ALTER TABLE IMPORT_TITRE_DIFFUSION
enable CONSTRAINT FK_IMPORT_TIT_DIFF_IMPORT_DIFF';
CASE Exception
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
--BEGIN
-- log
ps_log ( 'Erreur import Diffusion : UTL_FILE.INVALID_FILEHANDLE', l_s_repFicLogOut, l_s_logFic, 2 );
--END;
WHEN UTL_FILE.INVALID_OPERATION THEN
--BEGIN
-- log
ps_log ( 'Erreur import Diffusion : UTL_FILE.INVALID_OPERATION', l_s_repFicLogOut, l_s_logFic, 2 );
--END;
WHEN UTL_FILE.READ_ERROR THEN
--BEGIN
-- log
ps_log ( 'Erreur import Diffusion : UTL_FILE.READ_ERROR', l_s_repFicLogOut, l_s_logFic, 2 );
--END;
WHEN UTL_FILE.INVALID_PATH THEN
--BEGIN
-- log
ps_log ( 'Erreur import Diffusion : UTL_FILE.INVALID_PATH', l_s_repFicLogOut, l_s_logFic, 2 );
--END;
WHEN UTL_FILE.INVALID_MODE THEN
--BEGIN
-- log
ps_log ( 'Erreur import Diffusion : UTL_FILE.INVALID_MODE', l_s_repFicLogOut, l_s_logFic, 2 );
--END;
WHEN NO_DATA_FOUND THEN
BEGIN
-- log
ps_log ( 'Erreur import Diffusion : NO_DATA_FOUND', l_s_repFicLogOut, l_s_logFic, 2 );
-- fermeture du fichier
UTL_FILE.FCLOSE ( l_f_ficPrep );
-- destruction des directorys
l_n_rtnFct := PK_UTILITAIRES.fn_dropDirectory ( l_s_repFicIn );
l_n_rtnFct := PK_UTILITAIRES.fn_dropDirectory ( l_s_repFicLogOut );
END;
ELSE
-- log
ps_log ( 'Erreur import Diffusion : Autres', l_s_repFicLogOut, l_s_logFic, 2 );
END CASE;
END; |
mais je ne sais pas comment récupérer l'intitulé de chaque exception, ou un code, 'à la mano'
Auriez vous une idée de solution ?
Merci à vous
David