Die REPEAT-Anweisung führt SQL-Anweisungen in einer Schleife solange aus bis die angegebene Bedingung zutrifft. Die Schleife endet mit der Prüfung der Bedingung, d.h. sie wird mindestens einmal durchlaufen.
Mit der ITERATE-Anweisung kann sofort zum nächsten Schleifendurchlauf gewechselt werden. Die Schleife kann über eine LEAVE-Anweisung abgebrochen werden.
Die REPEAT-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 REPEAT-Anweisung ist eine nicht-atomare SQL-Anweisung, d.h. in ihr können weitere (atomare oder nicht-atomare) SQL-Anweisungen auftreten.
Wenn die REPEAT-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 :]
REPEAT
routine_sql_anweisung; [
routine_sql_anweisung; ]...
UNTIL
suchbedingung
END REPEAT [
marke ]
marke
Die Marke vor der REPEAT-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 REPEAT-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.
Die Suchbedingung stellt das Abbruchkriterium für die Laufschleife dar.
routine_sql_anweisung
SQL-Anweisung, die in der REPEAT-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 REPEAT-Anweisung ist eine nicht-atomare Anweisung:
Wenn die REPEAT-Anweisung Teil einer COMPOUND-Anweisung ist, dann gelten die dort beschriebenen Regeln, insbesondere die dort definierten Fehler-Routinen.
Wenn die REPEAT-Anweisung nicht Teil einer COMPOUND-Anweisung ist und eine der SQL-Anweisungen einen SQLSTATE meldet, dann werden ggf. nur die Änderungendieser Anweisung rückgängig gemacht. Die REPEAT-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 so lange durchlaufen, bis die Variable i den Wert hat.
DECLARE i INTEGER DEFAULT 0; ... label: REPEAT SET i= i+2; ... UNTIL i >1000 END REPEAT label;
Siehe auch
CREATE PROCEDURE, CREATE FUNCTION, ITERATE, LEAVE