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-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (A-D)

 

BEGIN-Anweisung

Mit dieser Anweisung gruppieren Sie SQL-Anweisungen.

Syntax
[ Anweisungslabel : ]
BEGIN [ [ NOT ] ATOMIC ]
   [ lokale_Deklaration; ... ]
   Anweisungsliste
   [ EXCEPTION [ Ausnahmefall ... ] ]
END [ Anweisungslabel ]
lokale_Deklaration :
 Variablendeklaration
| Cursordeklaration
| Ausnahmedeklaration
| temporäre_Tabelle_Deklaration
Variablendeklaration :
DECLARE Variablenname Datentyp
Ausnahmedeklaration :
DECLARE Ausnahmename EXCEPTION
FOR SQLSTATE [VALUE] Zeichenfolge
Ausnahmefall :
 WHEN Ausnahmename [, ... ] THEN Anweisungsliste
| WHEN OTHERS THEN Anweisungsliste
Parameter
  • Lokale_Deklaration   Unmittelbar nach BEGIN können in einer zusammengesetzten Anweisung lokale Deklarationen für Objekte folgen, die nur innerhalb der zusammengesetzten Anweisung existieren. Eine zusammengesetzte Anweisung kann eine lokale Deklaration für eine Variable, einen Cursor, eine temporäre Tabelle oder eine Ausnahmebedingung enthalten. Lokale Deklarationen können von jeder beliebigen Anweisung in dieser zusammengesetzten Anweisung oder in jeder beliebigen darin verschachtelten zusammengesetzten Anweisung referenziert werden. Lokale Deklarationen sind für die anderen Prozeduren, die von innerhalb einer zusammengesetzten Anweisung aufgerufen werden, nicht sichtbar.

  • Anweisungslabel (statement-label)   Wenn das Anweisungslabel am Ende angegeben ist, muss es mit dem Anweisungslabel am Anfang übereinstimmen. Die LEAVE-Anweisung kann verwendet werden, um die Ausführung bei der ersten Anweisung nach der zusammengesetzten Anweisung wieder aufzunehmen. Die zusammengesetzte Anweisung, die den Hauptteil einer Prozedur oder eines Triggers darstellt, hat ein implizites Label, das mit dem Namen der Prozedur oder des Triggers übereinstimmt.

    Eine ausführliche Beschreibung zu zusammengesetzten Anweisungen und Verarbeitungsroutinen bei Ausnahmefehlern finden Sie unter Fehler und Warnungen in Prozeduren und Triggern.

  • ATOMIC-Klausel   Eine unteilbare Anweisung wird entweder vollständig oder gar nicht ausgeführt. Beispiel: Eine UPDATE-Anweisung, die Tausende von Zeilen aktualisiert, kann nach den ersten aktualisierten Zeilen auf einen Fehler stoßen. Wenn die Anweisung nicht abgeschlossen werden kann, werden alle bisher durchgeführten Aktualisierungen rückgängig gemacht, sodass der Ausgangsstatus wieder hergestellt wird. Ebenso gilt: Wenn Sie angeben, dass die BEGIN-Anweisung unteilbar ist, wird die Anweisung entweder vollständig oder gar nicht ausgeführt.

Bemerkungen

Der Hauptteil einer Prozedur oder eines Triggers besteht aus einer zusammengesetzten Anweisung. Zusammengesetzte Anweisungen können auch in Steueranweisungen innerhalb einer Prozedur oder eines Triggers verwendet werden.

Eine zusammengesetzte Anweisung ermöglicht die Gruppierung einer oder mehrerer SQL-Anweisungen, die dann als Einheit behandelt werden können. Eine zusammengesetzte Anweisung beginnt mit dem Schlüsselwort BEGIN und endet mit dem Schlüsselwort END.

Berechtigungen

Keine.

Nebenwirkungen

Keine.

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Persistent Stored Module-Funktion.

Beispiel

Der Hauptteil einer Prozedur oder eines Triggers besteht aus einer zusammengesetzten Anweisung.

CREATE PROCEDURE TopCustomer (OUT TopCompany CHAR(35), OUT TopValue INT)
BEGIN
   DECLARE err_notfound EXCEPTION FOR
      SQLSTATE '02000';
   DECLARE curThisCust CURSOR FOR
      SELECT CompanyName, CAST(
            sum( SalesOrderItems.Quantity *
            Products.UnitPrice ) AS INTEGER) VALUE
      FROM Customers
            LEFT OUTER JOIN SalesOrders
            LEFT OUTER JOIN SalesOrderItems
            LEFT OUTER JOIN Products
      GROUP BY CompanyName;
   DECLARE ThisValue INT;
   DECLARE ThisCompany CHAR( 35 );
   SET TopValue = 0;
   OPEN curThisCust;
   CustomerLoop:
   LOOP
      FETCH NEXT curThisCust
         INTO ThisCompany, ThisValue;
      IF SQLSTATE = err_notfound THEN
         LEAVE CustomerLoop;
      END IF;
      IF ThisValue > TopValue THEN
         SET TopValue = ThisValue;
         SET TopCompany = ThisCompany;
      END IF;
   END LOOP CustomerLoop;
   CLOSE curThisCust;
END;