PL/SQL bietet einen robusten Ausnahmemechanismus, um die Laufzeitfehler anmutig zu verwalten und Anwendungsabstürzen zu verhindern. Der Kern dieses Mechanismus dreht sich um den EXCEPTION
in einem PL/SQL -Block. Dieser Block wird verwendet, um Ausnahmen zu fangen und zu handhaben, die während der Ausführung des vorhergehenden BEGIN
auftreten.
Die Grundstruktur sieht so aus:
<code class="sql">DECLARE -- Declare variables BEGIN -- Your PL/SQL code here EXCEPTION WHEN OTHERS THEN -- Handle any unhandled exception WHEN NO_DATA_FOUND THEN -- Handle the NO_DATA_FOUND exception WHEN ZERO_DIVIDE THEN -- Handle the ZERO_DIVIDE exception WHEN TOO_MANY_ROWS THEN -- Handle the TOO_MANY_ROWS exception -- ... other WHEN clauses for specific exceptions ... END; /</code>
Die Klausel WHEN OTHERS
Klausel für eine Ausnahme ist, für eine Ausnahme, die nicht ausdrücklich durch Vorgehen WHEN
ausgeht. Es ist entscheidend, dies einzuschließen, um eine unerwartete Programmabschluss zu verhindern, obwohl es sparsam und mit sorgfältiger Protokollierung verwendet werden sollte, um die Quelle des Fehlers zu bestimmen. Im Allgemeinen ist es besser, spezifische Ausnahmen zu behandeln, wenn möglich, wenn möglich für informative Fehlermeldungen und gezielte Wiederherstellungsstrategien. WHEN OTHERS
ohne ordnungsgemäße Protokollierung ernsthafte Probleme maskieren können.
PL/SQL hat mehrere vordefinierte Ausnahmetypen, die jeweils eine bestimmte Art von Fehler darstellen. Einige der häufigsten sind:
NO_DATA_FOUND
: Erhöht, wenn eine SELECT INTO
Anweisung keine Zeilen zurückgibt. Dies ist leicht durch seine spezifische Fehlermeldung zu erkennen.ZERO_DIVIDE
: Erhöht, wenn ein Versuch unternommen wird, sich durch Null zu teilen. Auch hier ist die Fehlermeldung klar.TOO_MANY_ROWS
: Erhöht, wenn eine SELECT INTO
Anweisung mehr als eine Zeile zurückgibt. Dies zeigt einen Fehler in der Abfrage an WHERE
die Klausel ist.DUP_VAL_ON_INDEX
: Erhöht, wenn versucht wird, einen doppelten Wert in einen eindeutigen Index einzufügen.INVALID_NUMBER
: Erhöht beim Versuch, eine nicht numerische Zeichenfolge in eine Nummer zu konvertieren.VALUE_ERROR
: Erhöht für verschiedene Datentypfehler, z. B. der Versuch, einer Variablen einen falschen Datentyp zuzuweisen.CURSOR_ALREADY_OPEN
: Erhöht, wenn versucht wird, einen bereits geöffneten Cursor zu öffnen.OTHERS
: Ein Alleinfall für eine Ausnahme, die nicht ausdrücklich behandelt wird. Durch die Identifizierung dieser Ausnahmen werden typischerweise die von der Datenbank zurückgegebene Fehlermeldung untersucht. Oracle bietet detaillierte Fehlermeldungen, die häufig den Ausnahmetyp und seine Ursache bestimmen. Sie können diese Informationen mit SQLCODE
(der einen numerischen Fehlercode zurückgeben) und SQLERRM
(die eine Textfehlermeldung zurückgeben) innerhalb des EXCEPTION
zugreifen.
Die Verbesserung der Fehlerbehandlung und -protokollierung ist für ein effektives Debuggen von entscheidender Bedeutung. Hier erfahren Sie, wie Sie Ihre PL/SQL -Fehlerbehandlung verbessern können:
Detaillierte Protokollierung: Anstatt einfach eine generische Fehlermeldung anzuzeigen, protokollieren Sie detaillierte Informationen, einschließlich:
SQLCODE
und SQLERRM
).DBMS_OUTPUT
zu verlassen. DBMS_OUTPUT
eignet sich für Tests und Entwicklung, jedoch nicht für Produktionssysteme.RAISE_APPLICATION_ERROR
erhöhen.Beispiel für eine verbesserte Protokollierung:
<code class="sql">PROCEDURE my_procedure(p_input IN NUMBER) IS v_result NUMBER; BEGIN -- ... your code ... EXCEPTION WHEN OTHERS THEN INSERT INTO error_log (error_time, procedure_name, sqlcode, sqlerrm, input_parameter) VALUES (SYSTIMESTAMP, 'MY_PROCEDURE', SQLCODE, SQLERRM, p_input); COMMIT; RAISE; -- Re-raise the exception to be handled by a calling procedure, if necessary. END; /</code>
Um ein robustes Anwendungsverhalten zu gewährleisten, befolgen Sie diese Best Practices:
WHEN OTHERS
. Behandeln Sie nach Möglichkeit spezifische Ausnahmen, wenn möglich für eine genauere Fehlerbehandlung.RAISE
: Wiederholen RAISE
eine Ausnahme und ermöglichen es, dass die Anrufverfahren sie behandeln. Verwenden Sie es strategisch, um Ausnahmen zu verbreiten.ROLLBACK
, um alle während der Transaktion vorgenommenen Änderungen rückgängig zu machen, wenn der Betrieb ausfällt. Dies gewährleistet die Datenintegrität.Durch die Befolgung dieser Richtlinien können Sie die Robustheit und Zuverlässigkeit Ihrer PL/SQL -Anwendungen erheblich verbessern. Effektives Ausnahmebehandlung ist entscheidend für den Aufbau von Wartungs- und benutzerfreundlichen Anwendungen.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Ausnahmen in PL/SQL um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!