Oracle PL/SQL Grundkurs

Die Ausnahmebehandlung - Eigene Exceptions definieren

Testen Sie unsere 1983 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Lassen Sie sich in diesem Video vom Trainer zeigen, wie Sie in einem PL/SQL-Programm eine eigene Exception definieren können. Dabei lernen Sie auch, wie man der eigenen Exception einen individuellen SQLCODE und eine eigene Fehlerbeschreibung zuordnet.

Transkript

Mit PL/SQL haben Sie die Möglichkeit, eigene Exceptions zu definieren. Solche individuellen Exceptions haben den Vorteil, dass sich ganz fein granulare, anwendungsbezogene, das heißt fachliche Ausnahmen definieren lassen. Ich werde Ihnen mal in unserem Beispiel zeigen, wie man eine eigene, selbst definierte Exception erzeugt, auslöst und abfängt. Zunächst öffne ich wieder unser Programm. (Stille) Ganz unten, unter den anderen definierten Variablen, deklariere ich jetzt mal eine Exception, die ich BMI_ERROR nennen werde. Hierfür schreibe ich den Fehler mal in Großbuchstaben hin und füge hinter dem Bezeichner das Schlüsselwort EXCEPTION hinzu. (Stille) Und dann werde ich die Exception BMI_ERROR über das Schlüsselwort RAISE auslösen. Also hier. (Stille) Im Ausnahmebehandlungsabschnitt können wir die Exception BMI_ERROR nun abfangen. (Stille) Beispielsweise so. WHEN BMI_ERROR THEN Und dann: (Stille) "Unsere eigene Exception". (Stille) Dies probieren wir jetzt mal aus. Ich speichere die Datei, schließe Notepad++ und starte unser Programm. (Stille) Dann gebe ich eine Körpergröße ein. (Stille) Ein Gewicht. (Stille) Und dann sehen Sie, dass hier die Ausgabe "Unsere eigene Exception!" erfolgt. Das Problem unserer eigenen Exception ist aber noch, dass sie nicht konform zu den von Oracle vordefinierten Exceptions ist. Normalerweise sollten wir einer Exception einen eigenen Error-Code zuordnen. Dass dies auch für eigene Exceptions möglich ist, werde ich Ihnen im nächsten Beispiel nun zeigen. Hierfür öffne ich wieder die Datei kap02_bmi.sql. Zunächst werde ich jetzt dafür sorgen, dass unsere Exception einen Error-Code erhält. Hierzu kann ich den Pragma EXCEPTION_INIT im Deklarationsabschnitt einsetzen. Ich schreibe also hier dahinter: PRAGMA EXCEPTION_INIT Und dann Klammer auf. Ein Pragma ist ganz einfach bloß eine Anweisung an den Compiler. Ich schreibe jetzt hinter der Klammer den Namen unserer Exception hin. Und dann brauche ich einen Error-Code. Als Error-Code sollten Sie einen Wert wählen, der zwischen -20000 und -20999 liegt. Ich wähle mal die -20001. Also so. Und dann ein Semikolon. (Stille) Das schreibe ich mal groß hin. (Stille) So, dann wären wir hiermit fertig. Hiermit teilen wir dem Compiler also mit, er möge unserer Exception den Error-Code -20001 zuweisen. Ich entferne mal den eigenen Abfangmechanismus, um zu testen, wie der Abfangmechanismus mit dem Namen OTHERS denn hierbei reagieren wird. Also speichere ich die Datei jetzt so, schließe Notepad++ und starte unser Programm erneut. (Stille) Dann gebe ich wieder eine Körpergröße ein. (Stille) Ein Gewicht. (Stille) Und jetzt sehen Sie, dass mir hier der ORA-Code -20001 ausgegeben wird. Jetzt fehlt aber immer noch die "Message", also die Beschreibung zu dem Fehler. Deshalb werde ich Ihnen nun abschließend in diesem Video eine weitere Möglichkeit zeigen, wie Sie eine individuelle, applikationsbezogene Exception auslösen können, die auch noch den Vorteil hat, dass sie der Ausnahme sowohl einen Error-Code als auch eine Error-Message zuordnet. Ich öffne also jetzt wieder unsere Datei. (Stille) Lösche die bisherigen Zeilen hier raus, die den BMI_ERROR erzeugt haben. (Stille) Und auch diese Zeile mit RAISE BMI_ERROR, die kann ich auch entfernen. Denn stattdessen kann ich jetzt einfach Folgendes schreiben. RAISE_APPLICATION_ERROR (Stille) Dann füge ich unseren Error-Code hinzu. -20001 Und auch direkt eine Fehlermeldung. (Stille) Ich schreibe da einfach "BMI Fehler" hinein. (Stille) Und Semikolon. Denn mit dieser Anweisung löse ich einen APPLICATION_ERROR aus, also eine fachbezogene Exception, mit dem SQL-Code -20001 und mit einer spezifischen Meldung. So einfach geht es dann also auch. Bei diesem RAISE_APPLICATION_ERROR haben wir jetzt nichts Sinnvolles unternommen. Und einfach nur einen sinnlosen BMI-Fehler auszugeben ist ja eigentlich nichts besonders Zweckmäßiges. Deshalb werde ich die RAISE_APPLICATION_ERROR-Anweisung jetzt mal nutzen, um etwas Sinnvolles hiermit anzustellen. Beispielsweise könnten wir hier unten im Exception-Block dafür sorgen, dass bei einem ZERO_DIVIDE nicht einfach nur eine Meldung erfolgt, sondern dass auch eine applikationsbezogene Exception mit Error-Code und Error-Message ausgelöst wird. Also schneide ich diese Zeile hier heraus. (Stille) Und füge sie dort mal hinzu. (Stille) Denn jetzt ist es so, dass der Fehler des ZERO_DIVIDE einen anderen Fehler wieder auslösen würde. Und weil dieser Fehler jetzt mit diesem verbunden ist, oder von diesem abhängig ist, sollte ich hier auch Entsprechendes reinschreiben. Deshalb schreibe ich da rein: "Groesse darf nicht 0 sein!" Beim RAISE_APPLICATION_ERROR können wir noch einen dritten Parameter einsetzen, der dafür sorgen kann, dass der definierte Error-Code als weitere obere Schicht des sogenannten "Error Stacks" gelangt. (Stille) Hierbei handelt es sich um den schichtweisen Aufbau von Error-Codes, die später bei der Fehlersuche hilfreich sein können. Um also unseren eigenen Error-Code ganz oben auf diesen Error Stack zu setzen, müssen wir als dritten Parameter den booleschen Wert "true" hinzufügen. Also schreibe ich hier hinter ein Komma und dann ein TRUE hinzu. (Stille) Ich speichere die Datei jetzt mal ab, schließe sie und starte das Programm erneut. (Stille) Gebe jetzt eine Körpergröße ein. Ein Gewicht. (Stille) Das hat jetzt gepasst. Ich muss natürlich eine 0 eingeben als Körpergröße, damit der Fehler verursacht wird. Also gebe ich hier jetzt diesmal eine Null ein. Dann ein Körpergewicht. (Stille) Und dann sehen Sie jetzt hier, dass unsere Exception ausgegeben wird. Der ORA-Code -20001, "Groesse darf nicht 0 sein!" Gleichzeitig wird aber auch der Rest des Error Stacks ausgegeben. Und hierbei sehen Sie dann auch: "the divisor is equal to zero". Der ist auch immer noch drin im Stack und deswegen kann man den hier auch schön nachvollziehen. In diesem Video habe ich Ihnen gezeigt, wie sie in einem PL/SQL-Programm eine eigene Exception definieren können. Dabei haben Sie auch gelernt, wie man der eigenen Exception einen individuellen SQL-Code und eine eigene Fehlerbeschreibung zuordnet.

Oracle PL/SQL Grundkurs

Entdecken Sie grundlegende Programmstrukuren, Stored Procedures und Functions in PL/SQL und sehen Sie, wie Sie auf Daten zugreifen können.

3 Std. 58 min (32 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!