Est-il possible d'obtenir le numéro de ligne où une exception a été lancée?
Je travaille sur un pl-sql script, dans lequel j'ai environ 10 TO_CHAR conversions.
L'un d'eux est en train de jeter un
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
exception.
Actuellement, im la journalisation du message avec ce morceau de code
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('Exception message is '||SQLERRM(sqlcode));
ROLLBACK;
Je tiens à ajouter (principalement à des fins de débogage) de la ligne où l'exception est levée, afin de recevoir un message dans le formulaire de
ORA-06502: PL/SQL: numeric or value error: character string buffer too small (at line x)
Est-il un moyen facile de faire cela?
source d'informationauteur Tom
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de 10g à utiliser
aussi regarder dans l'aide de
il y a un article dans Oracle Magazine d'avril '05 par Steven Feuerstein:
http://www.oracle.com/technetwork/issue-archive/2005/05-mar/o25plsql-093886.html
Acclamations, niels
Les réponses ont mentionné à la fois,
$$PLSQL_LINE & DBMS_UTILITY.FORMAT_ERROR_BACKTRACE
. Mais je voudrais ajouter un peu sur la différence entre eux:$$PLSQL_LINE & $$PLSQL_UNIT
PLSQL_LINE prédéfinies de l'enquête de la directive est un PLS_INTEGER littérale valeur indiquant le numéro de la ligne de référence de $$PLSQL_LINE dans le programme actuel de l'unité.
À partir de sa définition, PLSQL_LINE n'est pas adapté pour les exceptions enregistrement car il fournira le numéro de ligne de l'exception, plutôt que le numéro de la ligne de l'erreur s'est produite elle-même. Cela rend difficile la détection de l'emplacement de l'erreur surtout avec de grandes unités de programme, à moins que vous enveloppez chaque déclaration avec le gestionnaire d'exception comme Jeffrey réponse déclaré.
Cependant, la bonne chose à propos de PLSQL_LINE, il fournit le numéro sans la nécessité de toute extraction ou de traitement de chaîne. Par conséquent, il pourrait être plus approprié pour d'autres l'enregistrement.
Cette procédure permet d'afficher la pile d'appel à l'endroit où l'exception a été soulevée, même si la procédure est appelée à partir d'un gestionnaire d'exception à l'extérieur de son champ d'application.
L'avantage de cette procédure est qu'il fournit exactement le numéro de ligne dans le programme à l'aide lorsque l' erreur se produit, et non là où la procédure d'appel apparaît
Toutefois, la procédure renvoie une chaîne de caractères comme
ORA-XXXXX: at "<program_unit_name>", line xx
. Donc, si vous êtes intéressé à en extraire le numéro de la ligne elle-même, quelle que soit la journalisation but que vous voulez, vous aurez besoin d'analyser la chaîne.Enfin, pour faire la différence, ci-dessous sont deux procédures, avec le même contenu. Vous pouvez les exécuter et les avis de la sortie de différence
Et
Exécution:
vous avez besoin de 10g ou au-dessus. Vérifier DBMS_UTILITY.FORMAT_ERROR_BACKTRACE.
http://www.oracle.com/technetwork/issue-archive/2005/05-mar/o25plsql-093886.html
La DBMS_UTILITY.format_error_backtrace déclaration vous donnera le numéro de la ligne
Vous pourriez mettre votre gestionnaire d'exception autour de chaque déclaration.