Databases Reference
In-Depth Information
und die zugehörigen Ergebnisse.
NOHEINZ(ERWIN)
--------------------------
Erwin
Error starting at line 2 in command:
SELECT noHeinz('Heinz') FROM DUAL
Error report:
SQL Error: ORA-06510: PL/SQL: Unbehandelte
benutzerdefinierte Exception
ORA-06512: in "KLEUKER.NOHEINZ", Zeile 8
Man kann Ausnahmen in einer sogenannten Exception Section
fangen, die vor dem eigentlichen END steht und folgenden Auf-
bau hat.
WHEN <Exceptiontyp1>
THEN <Block1>
...
[ WHEN <ExceptiontypN>
THEN <BlockN>
WHEN OTHERS
THEN <BlockM>]
Die Exception Section wird von oben nach unten abgearbeitet.
Passt die Ausnahme vom Typ her zu dem Exceptiontyp, dann
wird der zugehörige Block ausgeführt und die Prozedur oder
Funktion normal verlassen. Falls kein Exceptiontyp zutrifft,
können mit WHEN OTHERS beliebige Ausnahmen gefangen
werden. Auf diese Zeilen wird oft verzichtet, da man auf eine
unklare Ausnahme kaum sinnvoll reagieren kann. Wird eine
Ausnahme insgesamt nicht behandelt, wird sie, wie vorher be-
schrieben, an die aufrufende Funktionalität weitergegeben. Bei
geschachtelten Aufrufen kann so eventuell ein aufrufendes
Programm auf die Ausnahme reagieren. Reagiert niemand,
führt dies zu einer Fehlermeldung des DBMS, wie im vorheri-
gen Beispiel gezeigt.
Das Verhalten soll mit einem kleinen Beispiel verdeutlicht wer-
den, wobei ein kleiner Überraschungseffekt eingebaut ist.
CREATE OR REPLACE PROCEDURE heinzTest
IS
heinz EXCEPTION;
BEGIN
DBMS_OUTPUT.PUT_LINE(noHeinz('Egon'));
DBMS_OUTPUT.PUT_LINE(noHeinz('Heinz'));
DBMS_OUTPUT.PUT_LINE(noHeinz('Erwin'));
systematische
Ausnahmenbe-
handlung
257
Search WWH ::




Custom Search