Wenn die Klausel ON EXCEPTION RESUME in der Anweisung CREATE PROCEDURE erscheint, prüft die Prozedur die folgende Anweisung, wenn ein Fehler auftritt. Wenn die Anweisung den Fehler verarbeiten kann, wird die Prozedur weiter ausgeführt und beginnt bei der Anweisung, die nach der fehlerverursachenden Anweisung kommt. Sie gibt die Kontrolle nicht an die aufrufende Umgebung zurück, wenn ein Fehler eintritt.
Das Verhalten für Prozeduren, die ON EXCEPTION RESUME verwenden, wird durch die Einstellung der Option "on_tsql_error" bestimmt. Siehe on_tsql_error-Option.
Anweisungen für die Fehlerbehandlung enthalten folgende Elemente:
Die folgende Demo-Prozedur zeigt, was passiert, wenn eine Anwendung die Prozedur OuterProc aufruft, OuterProc wiederum die Prozedur InnerProc aufruft, und diese dann auf einen Fehler trifft. Diese Demo-Prozeduren basieren auf den in diesem Abschnitt bereits vorher gezeigten:
DROP PROCEDURE OuterProc; DROP PROCEDURE InnerProc; CREATE PROCEDURE OuterProc() ON EXCEPTION RESUME BEGIN DECLARE res CHAR(5); MESSAGE 'Hello from OuterProc.' TO CLIENT; CALL InnerProc(); SET res=SQLSTATE; IF res='52003' THEN MESSAGE 'SQLSTATE set to ', res, ' in OuterProc.' TO CLIENT; END IF END; CREATE PROCEDURE InnerProc() ON EXCEPTION RESUME BEGIN DECLARE column_not_found EXCEPTION FOR SQLSTATE '52003'; MESSAGE 'Hello from InnerProc.' TO CLIENT; SIGNAL column_not_found; MESSAGE 'SQLSTATE set to ', SQLSTATE, ' in InnerProc.' TO CLIENT; END; CALL OuterProc(); |
Die Registerkarte Meldungen von Interactive SQL zeigt Folgendes an:
Hello from OuterProc. Hello from InnerProc. SQLSTATE set to 52003 in OuterProc. |
Die gewählte Ausführungsfolge lautet:
OuterProc wird ausgeführt und ruft InnerProc auf.
In InnerProc gibt die Anweisung SIGNAL einen Fehler bekannt.
Die MESSAGE-Anweisung kann Fehler nicht verarbeiten, daher wird die Kontrolle an OuterProc zurückgegeben, und die Meldung wird nicht angezeigt.
In OuterProc weist die Anweisung nach dem Fehler den SQLSTATE-Wert der Variablenres zu. Da es sich dabei um eine Anweisung mit Fehlerverarbeitungskapazitäten handelt, wird die Ausführung fortgesetzt, und die OuterProc Meldung wird angezeigt.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |