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

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

 

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. Die Prozedur basiert auf jener, die als ein Beispiel in Standard-Fehlerbehandlung in Prozeduren und Triggern verwendet wurde.



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 ein anderer Fehler als Column not found (Spalte nicht gefunden) in der inneren zusammengesetzten Anweisung gefunden wird, führt die Ausnahmeroutine die Anweisung RESIGNAL 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.