Exceptions in PL/SQL

Werbung
3. Stored Procedures und PL/SQL
PL/SQL
Exceptions in PL/SQL
• Wenn zur Laufzeit ein Fehler auftritt, wird eine PL/SQL-Exception ausgelöst.
• Wirkung: Verlassen des aktuellen Blocks, Exceptions können gefangen/behandelt
werden.
• Zu einer Exception gehört immer eine Fehlernummer, diese sind in SQL grundsätzlich negativ.
• Es existieren eine Reihe von vordefinierten Exceptions.
• Fehlernummer und zugehörige Exceptions können auch selbst definiert werden.
• Exceptions müssen nicht behandelt werden, im Extremfall schlagen sie in der Anwendung auf.
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
86
3. Stored Procedures und PL/SQL
PL/SQL
Behandlung von Exceptions
• Behandlung von Exceptions im Exception-Block mittels
when Exception then
...;
• Beispiel:
when NO_DATA_FOUND then
dbms_output.put_line (’Keine Daten verfuegbar:’ || sqlerrm);
• Allgemeine Behandlung:
when others then
...;
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
87
3. Stored Procedures und PL/SQL
PL/SQL
Beispiele für vordefinierte Exceptions
Exception
CURSOR ALREADY OPEN
DUP VAL ON INDEX
INVALID CURSOR
INVALID NUMBER
NO DATA FOUND
NOT LOGGED ON
ROWTYPE MISMATCH
STORAGE ERROR
TIMEOUT ON RESOURCE
TOO MANY ROWS
VALUE ERROR
ZERO DIVIDE
Fehlernummer
ORA-06511
ORA-00001
ORA-01001
ORA-01722
ORA-01403
ORA-01012
ORA-06504
ORA-06500
ORA-00051
ORA-01422
ORA-06502
ORA-01476
Erläuterung
Cursor ist bereits geöffnet
Keine Eindeutigkeit bei Schlüssel
Cursor nicht geöffnet
bei impliziter Typkonvertierung
SELECT liefert kein Ergebnis
Keine Verbindung zur Datenbank
Strukturvariablen inkompatibel
Speicherproblem
Datenbank-Sperre
SELECT liefert mehr als ein Tupel
inkompatible Werte, z.B. Zeichenkette zu kurz defi
Division durch 0
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
88
3. Stored Procedures und PL/SQL
PL/SQL
Benutzerdefinierte Exceptions
• Deklaration von Exceptions mit Hilfe des PL/SQL-Typs EXCEPTION
• Benutzerdefinierte Exceptions müssen im declare-Block deklariert werden:
declare
MEINE_EXCEPTION exception;
...
• Exceptions werden ausgelöst mit Hilfe von RAISE:
if x <> y then
raise MEINE_EXCEPTION
end if;
• Behandlung dann im Exception-Block:
exception
when MEINE_EXCEPTION then
...
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
89
3. Stored Procedures und PL/SQL
PL/SQL
Exceptions und selbstdefinierte DB-Fehlercodes
• Abbildung applikationsspezifischer Fehler auf DB-Fehlercodes
• In Oracle reservierter Bereich: -20999 bis -20000
• Zurordnung zwischen Exception und Fehlercode durch ein PRAGMA:
declare
MEINE_EXCEPTION exception;
PRAGMA EXCEPTION_INIT(MEINE_EXCEPTION, -20100);
...
• Mit Hilfe von raise application error kann dann ein DB-Fehlerzustand mit Fehlermeldung erzeugt werden:
if x <> y then
raise_application_error(-20100, ’ungueltiger Zustand’);
end if;
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, WS 2012/13
90
Herunterladen