
Ähnlich wie bei der Schleifenverarbeitung interner Tabellen können die Daten eines Extraktdatenbestands über eine Schleife ausgelesen werden:
LOOP. ... [AT FIRST | AT fg i [WITH fg j ] | AT LAST. ... ENDAT.] ... ENDLOOP.
Mit der AnweisungLOOP wird die Erzeugung des Extraktdatenbestands eines Programms abgeschlossen und eine Schleife über seine sämtlichen Sätze ausgeführt. Es wird pro Schleifendurchlauf ein Extraktdatensatz eingelesen. Die Werte der extrahierten Daten werden innerhalb der Schleife direkt in die Ausgangsfelder zurückgestellt. Es können mehrere Schleifen hintereinander ausgeführt werden. Die Schleife über einen Extraktdatenbestand ist nicht schachtelbar. Weiterhin können innerhalb und nach der Schleife keine weiterenEXTRACT -Anweisungen verwendet werden. In beiden Fällen kommt es zum Laufzeitfehler.
Im Unterschied zu internen Tabellen wird bei Extraktdatenbeständen also kein spezieller Arbeitsbereich oder ein Feldsymbol als Schnittstelle benötigt. Für jeden gelesenen Satz können die eingelesenen Daten innerhalb der Schleife unter ihren ursprünglichen Feldnamen weiterverarbeitet werden.
Um verschiedene Anweisungen nur für bestimmte Sätze des Datenbestands auszuführen, kann man die Steueranweisungen AT und ENDAT verwenden.
Die Anweisungsblöcke zwischen den Steueranweisungen werden für die unterschiedlichen Argumente von AT wie folgt abgearbeitet:
Der Anweisungsblock wird einmal beim ersten Satz des Datenbestands ausgeführt
Der Anweisungsblock wird einmal beim letzten Satz des Datenbestands ausgeführt
Die Steueranweisungen AT und ENDAT können auch zur Gruppenstufenverarbeitung eingesetzt werden.
Das folgende Programm sei mit der logischen Datenbank F1S verknüpft.
REPORT demo_extract_loop. NODES: spfli, sflight. FIELD-GROUPS: header, flight_info, flight_date. INSERT: spfli-carrid spfli-connid sflight-fldate INTO header, spfli-cityfrom spfli-cityto INTO flight_info.START-OF-SELECTION.GET spfli. EXTRACT flight_info.GET sflight. EXTRACT flight_date.END-OF-SELECTION. LOOP. AT FIRST. WRITE / 'Start ofLOOP'. ULINE. ENDAT. AT flight_info WITH flight_date. WRITE: / 'Info:', spfli-carrid , spfli-connid, sflight-fldate, spfli-cityfrom, spfli-cityto. ENDAT. AT flight_date. WRITE: / 'Date:', spfli-carrid , spfli-connid, sflight-fldate. ENDAT. AT LAST. ULINE. WRITE / 'End ofLOOP'. ENDAT. ENDLOOP.
Das Anlegen und Füllen des Extraktdatenbestands entspricht dem Beispiel unter Extrakt mit Daten füllen . Zum Zeitpunkt END-OF-SELECTION ist die Datenbeschaffung durch die logische Datenbank abgeschlossen und der Datenbestand wird in der LOOP -Schleife einmal gelesen.
Durch die Steueranweisungen AT FIRST und AT LAST werden zu Beginn und Ende der Schleife jeweils eine Zeile und eine Linie in die Liste geschrieben.
Durch die SteueranweisungAT fg i werden für jede der beiden Satzarten die entsprechenden Felder ausgegeben. Durch den Zusatz WITH flight_date werden die Sätze der Feldgruppeflight_info nur dann ausgegeben, wenn danach mindestens ein Satz der Feldgruppeflight_date kommt, also wenn die logische Datenbank zu einem Flug mindestens ein Datum übergeben hat.
Der Anfang der Ausgabeliste sieht etwa folgendermaßen aus:
Dass der Inhalt des Feldssflight-fldate im Bereich header der Satzartflight_info auf der Liste als Gatter (#) dargestellt ist, liegt daran, dass die logische Datenbank am Ende einer Hierarchiestufe alle Felder dieser Stufe mit HEX-Nullwerten füllt. Diese Eigenschaft ist wichtig für das Sortieren und die Gruppenstufenverarbeitung von Extraktdatenbeständen.