Oracle
 sql >> Base de données >  >> RDS >> Oracle

Gestion des exceptions dans Procedure avec fonctions imbriquées en pl/sql

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.