Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Gespeicherte Prozeduren, Trigger, Batches und benutzerdefinierte Funktionen » Behandlung von Fehlern und Warnungen

 

Fehlerbehandlung mit ON EXCEPTION RESUME

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.

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:

  1. OuterProc wird ausgeführt und ruft InnerProc auf.

  2. In InnerProc gibt die Anweisung SIGNAL einen Fehler bekannt.

  3. Die MESSAGE-Anweisung kann Fehler nicht verarbeiten, daher wird die Kontrolle an OuterProc zurückgegeben, und die Meldung wird nicht angezeigt.

  4. 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.

 Siehe auch