Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

LOOP - SQL-Anweisungen in einer Schleife ausführen

Die LOOP-Anweisung führt SQL-Anweisungen in einer Schleife aus.

Mit der ITERATE-Anweisung kann sofort zum nächsten Schleifendurchlauf gewechselt werden. Die Schleife kann über eine LEAVE-Anweisung abgebrochen werden.

Die LOOP-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 LOOP-Anweisung ist eine nicht-atomare SQL-Anweisung, d.h. in ihr können weitere (atomare oder nicht-atomare) SQL-Anweisungen auftreten.

Wenn die LOOP-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 :]

LOOP

      routine_sql_anweisung; [ routine_sql_anweisung; ]...

END LOOP [ marke ]



marke

Die Marke vor der LOOP-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 Prozedur überprüfen kann (z.B. bei geschachtelten Schleifen).

Die Marke am Ende der LOOP-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.


routine_sql_anweisung

SQL-Anweisung, die in der LOOP-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 LOOP-Anweisung ist eine nicht-atomare Anweisung:

    • Wenn die LOOP-Anweisung Teil einer COMPOUND-Anweisung ist, dann gelten die dort beschriebenen Regeln, insbesondere die dort definierten Fehler-Routinen.

    • Wenn die LOOP-Anweisung nicht Teil einer COMPOUND-Anweisung ist und eine der SQL-Anweisungen einen SQLSTATE meldet, dann werden ggf. nur die Änderungen dieser Anweisung rückgängig gemacht. Die LOOP-Anweisung und die Routine, in der sie enthalten ist, werden abgebrochen. Die SQL-Anweisung, in der die Routine verwendetwurde, liefert den betreffenden SQLSTATE zurück.


Beispiel

Eine Schleife wird nach 1000 Durchläufen mit LEAVE abgebrochen.

DECLARE i INTEGER DEFAULT 0; 
   ...
   label: 
   LOOP
       SET i = i+1; 
       IF i > 1000 THEN LEAVE label; 
       ...
   END LOOP label;

Siehe auch

CREATE PROCEDURE, CREATE FUNCTION, ITERATE, LEAVE