Ich versuche, alle Ausnahmen in einem Oracle-Paket zu protokollieren. Hier ist, was ich am Ende des Verfahrens habe:
%Vor%Das funktioniert gut, aber ich möchte auch den Fehlercode und die Nachricht protokollieren. Ich habe es versucht:
%Vor%Aber das gibt mir den Fehler:
%Vor%Was ist der richtige Weg, dies zu tun? Danke!
Sie können SQLERRM
nicht direkt verwenden - Sie müssen es einer Zwischenvariablen zuweisen. Beachten Sie, dass Oracle 9i Sie damit durchkommen lassen würde, aber das war schon immer das dokumentierte Verhalten von . Siehe hier für Beispielcode.
Sie könnten auch erwägen, dieses Bit in eine autonome Transaktion zu schreiben, damit es auch dann protokolliert wird, wenn die PL / SQL-Code-Transaktion zurückgesetzt wird.
Verwenden Sie niemals SQLERRM
oder SQLCODE
.
Verwenden Sie immer dbms_utility.format_error_stack||dbms_utility.format_error_backtrace
oder etwas ähnliches.
Ausnahmeprotokollierung ohne Speichern der Zeilennummer ist einfach grausam.
Gaius gab dir die kurze Antwort. Sein Kommentar über das Einwickeln in eine autonome Transaktion ist sehr wichtig. Sie werden den Tag bereuen, an dem Ihre Transaktion rückgängig gemacht wurde, und Sie wissen nicht warum.
Hier ist etwas, das zeigt, wie man eine autonome Transaktion mit ein paar zusätzlichen Details verwendet, so dass Sie eine ganze Menge mehr darüber wissen, wo Ihr Fehler aufgetreten ist.
Ihr Ausnahmeblock wird in etwa so aussehen: -
%Vor%... aaaund, hier ist der Code, den Sie brauchen, um dies zu unterstützen. Spielen Sie damit herum, es ist nützlich: -)
%Vor%