Fasst SQL-Anweisungen in Gruppen zusammen.
[ Anweisungslabel : ] BEGIN [ [ NOT ] ATOMIC ] [ lokale_Deklaration; ... ] Anweisungsliste [ EXCEPTION [ Ausnahmefall ... ] ] END [ Anweisungslabel ]
lokale_Deklaration : Variablendeklaration | Cursordeklaration | Ausnahmendeklaration | Deklaration_temporäre_Tabelle
Variablendeklaration DECLARE Variablenname [, ... ] Datentyp [ { = | DEFAULT } Anfangswert ]
Anfangswert : Spezialwert | Zeichenfolge | [ - ] Anzahl | ( konstanter_Ausdruck) | integrierte_Funktion( konstanter_Ausdruck ) | NULL
Spezialwert : CURRENT { DATABASE | DATE | PUBLISHER | TIME | TIMESTAMP | USER | UTC TIMESTAMP } | USER
Ausnahmedeklaration : DECLARE Ausnahmename EXCEPTION FOR SQLSTATE [VALUE] Zeichenfolge
Ausnahmefall : WHEN Ausnahmename [, ... ] THEN Anweisungsliste | WHEN OTHERS THEN Anweisungsliste
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 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 atomare Anweisung wird entweder komplett 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.
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.
Wenn Sie einen Anfangswert angeben, wird die Variable auf diesen Wert gesetzt. Wenn Sie keinen Anfangswert angeben, enthält die Variable NULL, bis mit der SET-Anweisung ein anderer Wert zugewiesen wird.
Wenn Sie einen Anfangswert angeben, muss der Datentyp dem durch Datentyp definierten Typ entsprechen.
Keine.
Keine.
SQL/2008 BEGIN kennzeichnet eine zusammengesetzte Anweisung und umfasst einen Teil der optionalen SQL-Sprachenfunktion P002 in SQL/2008. Das von SQL Anywhere unterstützte Format für die Ausnahmendeklaration, nämlich die DECLARE EXCEPTION-Anweisung, ist eine Erweiterung des Herstellers. In SQL/2008 werden Ausnahmen in Form einer Routinendeklaration mit den Schlüsselwörtern DECLARE HANDLER angegeben.
Transact-SQL BEGIN ... END-Blöcke zum Definieren von zusammengesetzten Anweisungen werden von Adaptive Server Enterprise unterstützt.
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; |
Im nachstehenden Beispiel werden die folgenden Variablen deklariert:
BEGIN DECLARE v1 INT = 5 DECLARE v2, v3 CHAR(10) = 'abc' // ... END |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |