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

 

Standardverarbeitung von Warnungen in Prozeduren und Triggern

Fehler und Warnungen werden unterschiedlich verarbeitet. Während die Standardvorgehensweise bei Fehlern darin besteht, einen Wert für die Variablen SQLSTATE und SQLCODE zu setzen sowie beim Auftritt eines Fehlers die Kontrolle an die aufrufende Umgebung zurückzugeben, besteht die Standardmaßnahme bei Warnungen darin, die Werte SQLSTATE und SQLCODE zu setzen, die Prozedur aber fortzusetzen.

Mit den folgenden Demo-Prozeduren wird die Standardverarbeitung von Warnungen gezeigt. Diese Prozeduren basieren auf jenen, die in Standard-Fehlerbehandlung in Prozeduren und Triggern verwendet werden.

In diesem Fall generiert die SIGNAL-Anweisung die Meldung Zeile nicht gefunden, die keine Fehlermeldung, sondern nur eine Informationsmeldung darstellt.

DROP PROCEDURE OuterProc;
DROP PROCEDURE InnerProc;

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 row_not_found
      EXCEPTION FOR SQLSTATE '02000';
   MESSAGE 'Hello from InnerProc.' TO CLIENT;
   SIGNAL row_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.
SQLSTATE set to 02000 in InnerProc.
SQLSTATE set to 00000 in OuterProc.

Beide Prozeduren werden nach Ausgabe der Warnung fortgesetzt, wobei SQLSTATE von der Warnbedingung gesetzt wurde (02000).

Das Ausführen der zweiten MESSAGE-Anweisung in InnerProc setzt die Warnung zurück. Die erfolgreiche Ausführung einer SQL-Anweisung setzt SQLSTATE auf 00000 und SQLCODE auf 0 zurück. Wenn eine Prozedur den Fehlerstatus registrieren soll, muss sie die Zuordnung eines Werts sofort nach dem Ausführen der Anweisung vornehmen, die den Fehler oder die Warnung verursacht hat.