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

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Gespeicherte Prozeduren und Trigger » Prozeduren, Trigger und Batches verwenden » Fehler und Warnungen in Prozeduren und Triggern

 

Standard-Fehlerbehandlung in Prozeduren und Triggern

In diesem Abschnitt wird beschrieben, wie SQL Anywhere Fehler behandelt, die während des Ausführens einer Prozedur entstehen, wenn Sie keine Anweisungen für die Fehlerbehandlung in Ihrer Prozedur einprogrammiert haben.

Um ein anderes Verhalten zu erhalten, können Sie Ausnahmeroutinen verwenden, wie unter Ausnahmeroutinen in Prozeduren und Triggern verwenden beschrieben.

Warnungen werden etwas anders behandelt als Fehler: Eine Beschreibung finden Sie unter Standardverarbeitung von Warnungen in Prozeduren und Triggern.

Es gibt zwei Arten für die Fehlerbehandlung mit expliziten Fehlerbehandlungsroutinen:

  • Standard-Fehlerbehandlung   Die Prozedur oder der Trigger schlägt fehl und gibt einen Fehlercode an die aufrufende Umgebung zurück.

  • ON EXCEPTION RESUME   Wenn die Klausel ON EXCEPTION RESUME in der Anweisung CREATE PROCEDURE erscheint, setzt die Prozedur die Arbeit nach einem Fehler fort und arbeitet mit der Anweisung weiter, die nach der fehlerverursachenden Anweisung kommt.

    Das genaue Verhalten für Prozeduren, die ON EXCEPTION RESUME verwenden, wird durch die Einstellung der Option "on_tsql_error" bestimmt. Weitere Hinweise finden Sie unter on_tsql_error-Option [Kompatibilität].

Standard-Fehlerbehandlung

Im Allgemeinen gilt: Wenn eine SQL-Anweisung in einer Prozedur oder einem Trigger fehlschlägt, beendet die Prozedur oder der Trigger die Ausführung und gibt die Kontrolle mit einer entsprechenden Einstellung der Werte SQLSTATE und SQLCODE an das Anwendungsprogramm zurück. Dies gilt auch, wenn der Fehler in einer Prozedur oder einem Trigger auftrat, die direkt oder indirekt aufgerufen wurden. Bei einem Trigger wird der Vorgang, der den Trigger ausgelöst hat, ebenfalls rückgängig gemacht, und der Fehler wird an die Anwendung zurückgegeben.

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.

CREATE PROCEDURE OuterProc()
BEGIN
   MESSAGE 'Hello from OuterProc.' TO CLIENT;
   CALL InnerProc();
   MESSAGE 'SQLSTATE set to ',
      SQLSTATE,' in OuterProc.' TO CLIENT
END;
CREATE PROCEDURE InnerProc()
   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();

Das Register "Meldungen" von Interactive SQL zeigt Folgendes an:

Hello from OuterProc.
Hello from InnerProc.

Die DECLARE-Anweisung in InnerProc deklariert einen symbolischen Namen für einen der vordefinierten SQLSTATE-Werte, die den dem Server bereits bekannten Fehlerbedingungen zugeordnet sind.

Die MESSAGE-Anweisung sendet eine Meldung an das Register "Meldungen" von Interactive SQL.

Die SIGNAL-Anweisung generiert eine Fehlerbedingung aus der Prozedur InnerProc.

Nach der SIGNAL-Anweisung in InnerProc werden keine anderen Anweisungen ausgeführt: InnerProc gibt die Kontrolle sofort an die aufrufende Umgebung zurück, die in diesem Fall die Prozedur OuterProc ist. Nach der CALL-Anweisung in OuterProc werden keine Anweisungen ausgeführt. Die Fehlerbedingung wird an die aufrufende Umgebung zurückgegeben, um von dort aus weiter behandelt zu werden. Beispiel: Interactive SQL behandelt den Fehler, indem in einem Fenster eine Beschreibung des Fehlers ausgegeben wird.

Die TRACEBACK-Funktion bietet eine Liste der Anweisungen, die ausgeführt wurden, als der Fehler auftrat. Sie können die TRACEBACK-Funktion aus Interactive SQL verwenden, indem Sie folgende Anweisung eingeben:

SELECT TRACEBACK();