Die WHILE-Anweisung führt SQL-Anweisungen in einer Schleife aus solange die angegebene Suchbedingung zutrifft. Die Schleife beginnt mit einer Prüfung, d.h. sie kann schon vor dem ersten Durchlauf beendet sein.
Mit der ITERATE-Anweisung kann sofort zum nächsten Schleifendurchlauf gewechselt werden. Die Schleife kann über eine LEAVE-Anweisung abgebrochen werden.
Die WHILE-Anweisung darf nur in einer Routine angegeben werden, d.h. im Rahmen einer CREATE PROCEDURE- oder CREATE FUNCTION-Anweisung. Routinen und ihre Verwendung in SESAM/SQL sind detailliert im Kapitel „Routinen" beschrieben.
Die WHILE-Anweisung ist eine nicht-atomare SQL-Anweisung, d.h. in ihr können weitere (atomare oder nicht-atomare) SQL-Anweisungen auftreten.
Wenn die WHILE-Anweisung Teil einer COMPOUND-Anweisung ist, dann kann die Schleife bei entsprechenden Fehler-Routinen auch beim Auftreten eines bestimmten SQLSTATE (z.B. keine Daten, Klasse 02xxx) verlassen werden.
[
marke :]
WHILE
suchbedingung
DO
routine_sql_anweisung; [
routine_sql_anweisung; ]...
END WHILE [
marke ]
marke
Die Marke vor der WHILE-Anweisung (Anfangsmarke) bezeichnet den Anfang der Schleife. Sie darf nicht identisch sein mit einer anderen Marke innerhalb der Schleife.
Die Anfangsmarke muss nur dann angegeben werden, wenn mit ITERATE zum nächsten Schleifendurchlauf gewechselt werden soll oder wenn die Schleife über eine LEAVE-Anweisung verlassen werden soll. Sie sollte aber stets verwendet werden, damit SESAM/SQL die korrekte Struktur der Routine überprüfen kann (z.B. bei geschachtelten Schleifen).
Die Marke am Ende der WHILE-Anweisung (Endemarke) bezeichnet das Ende der Schleife. Wenn die Endemarke angegeben ist, dann muss auch die Anfangsmarke angegeben sein. Beide Marken müssen identisch sein.
suchbedingung
Suchbedingung, deren Auswertung einen Wahrheitswert ergibt.
routine_sql_anweisung
SQL-Anweisung, die in der WHILE-Anweisung ausgeführt werden soll.
Eine SQL-Anweisung wird mit „;“ (Semikolon) abgeschlossen.
Mehrere SQL-Anweisungen können nacheinander angegeben werden. Sie werden in der angegebenen Reihenfolge ausgeführt.
Vor der Durchführung einer SQL-Anweisung werden keine Privilegien geprüft.Eine SQL-Anweisung in einer Routine darf auf die Parameter der Routine und (wenn die Anweisung Teil einer COMPOUND-Anweisung ist) auf lokale Variablen, jedoch nicht auf Benutzervariablen zugreifen.
Syntax und Bedeutung von routine_sql_anweisung sind zentral im Abschnitt „SQL-Anweisungen in Routinen" beschrieben. Die dort genannten SQL-Anweisungen dürfen verwendet werden.
Ausführungshinweise
Die WHILE-Anweisung ist eine nicht-atomare Anweisung:
Wenn die WHILE-Anweisung Teil einer COMPOUND-Anweisung ist, dann gelten die dort beschriebenen Regeln, insbesondere die dort definierten Fehler-Routinen.
Wenn die WHILE-Anweisung nicht Teil einer COMPOUND-Anweisung ist und eine der SQL-Anweisungen einen SQLSTATE meldet, dann werden ggf. nur die Änderungen dieser SQL-Anweisung rückgängig gemacht. Die WHILE-Anweisung und die Routine, in der sie enthalten ist, werden abgebrochen. Die SQL-Anweisung, in der die Routine verwendet wurde, liefert den betreffenden SQLSTATE zurück.
Beispiel
Die Schleife wird solange durchlaufen, wie die Variable i einen Wert < 100 hat.
DECLARE i INTEGER DEFAULT 0; label: WHILE i < 100 DO SET i = i+1; ... END WHILE label;
Siehe auch
CREATE PROCEDURE, CREATE FUNCTION, ITERATE, LEAVE