Le RAISE_APPLICATION_ERROR
procédure
a un troisième paramètre qui contrôle si l'exception remplace la pile d'exceptions actuelle (le comportement par défaut) ou s'y ajoute.
Donc, si vous le passez TRUE
il affichera les deux messages ; dans l'appel de votre procédure :
...
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR (-20101, 'Problem in loading Affected Circle data',
TRUE);
END;
vous donne le résultat :
BEGIN
*
ERROR at line 1:
ORA-20101: Problem in loading Affected Circle data
ORA-06512: at "SRUSER.ADD_AFFECTEDCIRCLE", line 13
ORA-20102: Circle Code is wrong or not available
ORA-06512: at line 2
Pour afficher uniquement les messages et non les autres informations de la pile, vous devez manipuler la pile. Cet article
explique comment utiliser format_error_backtrace
pour extraire les informations qui vous intéressent, mais malheureusement le lien vers le BT
le paquet est mort. Certains du même terrain est couvert ici
. Essentiellement, vous devez analyser la chaîne d'exception en lignes et afficher uniquement celles qui commencent par ORA-20%
, je pense.
Mais faites attention à ne pas perdre d'informations qui pourraient en réalité être vitales. En particulier, je vous suggère de ne intercepter que les erreurs spécifiques que vous recherchez, et non OTHERS
- laissez cela de côté pour pouvoir gérer les erreurs inattendues et ne pas cacher quelque chose d'important.