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

 

Verschachtelte zusammengesetzte Anweisungen und Ausnahmeroutinen

Der Programmcode nach einer Anweisung, die einen Fehler verursacht, wird nur ausgeführt, wenn in die Prozedurdefinition eine Klausel ON EXCEPTION RESUME einprogrammiert ist.

Sie können verschachtelte zusammengesetzte Anweisungen verwenden, um mehr Kontrolle über Anweisungen zu erhalten, die nach einem Fehler ausgeführt oder nicht ausgeführt werden.

Das folgende Beispiel zeigt, wie verschachtelte zusammengesetzte Anweisungen für die Ablaufsteuerung verwendet werden können.



DROP PROCEDURE OuterProc;
DROP PROCEDURE InnerProc;

CREATE PROCEDURE InnerProc()
BEGIN
   BEGIN
      DECLARE column_not_found
      EXCEPTION FOR SQLSTATE VALUE '52003';
      MESSAGE 'Hello from InnerProc' TO CLIENT;
      SIGNAL column_not_found;
      MESSAGE 'Line following SIGNAL' TO CLIENT
      EXCEPTION
         WHEN column_not_found THEN
            MESSAGE 'Column not found handling' TO
            CLIENT;
         WHEN OTHERS THEN
            RESIGNAL;
   END;
   MESSAGE 'Outer compound statement' TO CLIENT;
END;

CALL InnerProc();

Die Registerkarte Meldungen von Interactive SQL zeigt Folgendes an:

Hello from InnerProc
Column not found handling
Outer compound statement

Nach der Anweisung SIGNAL, die den Fehler verursacht, geht die Kontrolle auf die Ausnahmeroutine für die zusammengesetzte Anweisung über, und die Meldung Verarbeitung der Ausnahmebedingung wird ausgegeben. Die Kontrolle wird dann wieder an die äußere zusammengesetzte Anweisung zurückgegeben, und die Meldung Outer compound statement wird ausgegeben.

Wenn in der inneren zusammengesetzten Anweisung ein anderer Fehler auftritt als die nicht gefundene Spalte, führt die Ausnahmeroutine die RESIGNAL-Anweisung aus. Die Anweisung RESIGNAL übergibt die Kontrolle direkt zurück an die aufrufende Umgebung, und der Rest der äußeren zusammengesetzten Anweisung wird nicht ausgeführt.