Comment un journal de toutes les exceptions dans le package Oracle?
J'essaie de connecter toutes les exceptions dans un package Oracle. Voici ce que j'ai à la fin de la procédure:
EXCEPTION
WHEN OTHERS THEN
INSERT INTO VSLogger (MESSAGE) VALUES ('Caught Exception');
Cela fonctionne bien, mais je veux aussi le journal le code d'erreur et un message. J'ai essayé:
EXCEPTION
WHEN OTHERS THEN
INSERT INTO VSLogger (MESSAGE) VALUES ('Caught Exception: Error ' || SQLCODE || ', Msg: ' || SQLERRM);
Mais cela me donne l'erreur:
490/7 PL/SQL: SQL Statement ignored
490/100 PL/SQL: ORA-00984: column not allowed here
Quelle est la manière correcte de le faire? Merci!
OriginalL'auteur Mike Christensen | 2012-02-07
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser
SQLERRM
directement - vous devez l'affecter à une variable intermédiaire. Notez que Oracle 9i vous permettrait de sortir avec elle, mais qui a toujours été la comportement documenté. Voir ici pour des exemples de code.Vous pourriez aussi envisager d'emballage de ce bit dans un cadre autonome de la transaction, de sorte qu'il devient connecté, même si votre code PL/SQL de la transaction obtient annulée.
OriginalL'auteur Gaius
Ne jamais utiliser
SQLERRM
ouSQLCODE
.Toujours utiliser
dbms_utility.format_error_stack||dbms_utility.format_error_backtrace
, ou quelque chose de similaire.Enregistrement d'Exception sans enregistrer le numéro de ligne est juste cruel.
OriginalL'auteur Jon Heller
Gaius vous a donné la réponse la plus courte. Son commentaire sur l'enveloppant dans un autonome opération est très importante. Vous allez regretter le jour de votre transaction ai roulé le dos, et vous ne savez pas pourquoi.
Quelque chose ici de montrer à l'aide d'un autonome transaction avec un peu plus de détails jeté dans de sorte que vous savez tout un tas plus de l'endroit où l'erreur s'est produite.
Votre bloc d'exception devient quelque chose comme ceci:-
... aaaand, ici tout le code dont vous avez besoin à l'appui de cette. Jouer avec ça, c'est utile 🙂
Qui vient le plus souvent lorsqu'un embedded SQL instruction select dans un ensemble de variables, et plutôt que d'avoir une ligne retournée, aucune ligne n'est retournée.
Oui, mais le problème avec ceci est qu'il se produit par intermittence environ 10 fois par jour, sans rime ni raison! Vous actualisez la page, avec la même requête, et il fonctionne de nouveau. Essayé de retrouver la cause de plus d'une semaine maintenant.
Utiliser le package ci-dessus, et il va se connecter pour vous la ligne de votre code de l'exception est levée. C'est l'un des avantages de celui-ci. Heureux de vous aider, comme vous pouvez le dire à partir des commentaires dans mon code, je l'ai mis ensemble dans beaucoup d'autres endroits, et c'est l'une des normes dans mon code workbelt 🙂
Je n'ai pas été en mesure d'obtenir le package à installer correctement. Je reçois le message d'erreur
115/12 PL/SQL: ORA-00942: table or view does not exist
- Cependant, la ligne 115 est au milieu d'un commentaire, donc je n'ai aucune idée de ce dont il parle.OriginalL'auteur Mike McAllister