Wie werden alle Ausnahmen im Oracle-Paket protokolliert?

8

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!

    
Mike Christensen 07.02.2012, 22:19
quelle

3 Antworten

9

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.

    
Gaius 07.02.2012, 22:23
quelle
9

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.

    
Jon Heller 08.02.2012 04:36
quelle
7

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%     
Mike McAllister 08.02.2012 00:01
quelle

Tags und Links