Databases Reference
In-Depth Information
EXCEPTION
WHEN heinz THEN
DBMS_OUTPUT.PUT_LINE('Ein Heinz');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Wat nu?');
END;
Die Ausführung mit
EXECUTE heinzTest;
führt zu folgender Ausgabe.
Egon
Wat nu?
Die Reaktion beim Parameter „Egon“ entspricht den Erwartun-
gen. Da bei „Heinz“ eine Ausnahme auftritt, ist es auch klar,
dass es keine Ausgabe zu „Erwin“ gibt. Überraschend ist aber
zunächst, dass die Ausgabe „Wat nu?“ und nicht „Ein Heinz“
erscheint. Mit etwas Programmiererfahrung lässt sich das Prob-
lem leicht lösen. In der Funktion noHeinz wird eine lokale Va-
riable heinz vom Typ Exception deklariert, die innerhalb der
Funktion genutzt werden kann. Außerhalb der Funktion ist die
lokale Variable aber unbekannt, so dass die Exception in
heinzTest nur zufällig den gleichen Namen hat, aber sonst in
keiner Beziehung zu dieser Exception steht.
Möchte man diesen Ansatz nutzen, müsste man Ausnahmen
global erklären, was hier aber nicht betrachtet werden soll. Glo-
bale Ausnahmen werden von PL/SQL aber bereits zur Verfü-
gung gestellt, so kann man z. B. auf die Ausnahme ZE-
RO_DIVIDE reagieren, falls unerlaubt durch 0 geteilt wurde.
Statt den Ausnahmemechanismus direkt zu nutzen, stellt
PL/SQL einen komfortableren Ansatz zur Verfügung, bei dem
ein Oracle-Ansatz vom Entwickler mit benutzt wird. Dazu wird
der Befehl
RAISE_APPLICATION_ERROR( <Nummer>,<Fehlertext> )
genutzt, dabei muss die Nummer zwischen -21000 und -20000
liegen, da die anderen Nummern für das System reserviert
sind. Das folgende Beispiel zeigt eine Kombination der erwähn-
ten Ausnahmemechanismen.
Nutzung des
existierenden
Fehlermecha-
nismus
CREATE OR REPLACE PROCEDURE exTest
IS
I INTEGER DEFAULT 0;
BEGIN
BEGIN
258
Search WWH ::




Custom Search