!--a11y-->

内部テーブルと同様に、ループを使用して抽出データセットのデータを読み込むことができます。
LOOP.
...
[AT FIRST |
AT <fgi> [WITH <fgj>] | AT LAST.
...
ENDAT.]
...
ENDLOOP.
LOOP 命令が使用されると、抽出データセットの登録が中止され、データセットのエントリのループが開始されます。各ループパスでは、抽出データセットのレコードが 1 つ読み込まれます。抽出項目の値は、ループ内の対応する出力項目に配置されます。複数のループを次々に使用できますが、ループをネストすることはできません。ループ内またはループ後に EXTRACT 命令を追加使用することもできません。いずれの場合も実行時エラーが発生します。
内部テーブルとは対照的に、抽出データセットでは、インタフェースとして特別な作業領域またはフィールドシンボルを必要としません。オリジナルの項目名を使用して、ループ内のデータセットの各レコードを処理することができます。
データセットの特定レコードの一部の命令だけを実行する場合は、制御命令 AT および ENDAT を使用します。
以下のように、AT の各種オプションの制御命令の間で命令ブロックが処理されます。
キ AT FIRST
データセットの最初のレコードに対して命令ブロックが 1 回実行されます。
キ AT <fgi> [WITH <fgj>]
現在読み込まれている抽出レコードのレコードタイプが項目グループ <fg i> で定義されている場合は、命令ブロックが処理されます。WITH <fgj> オプションの使用時には、抽出データセットで、項目グループ <fgi> の現在読み込まれているレコードの直後に項目グループ <fgj> のレコードを続ける必要があります。
キ AT LAST
データセットの最後のレコードに対して命令ブロックが 1 回実行されます。
制御レベル処理で AT および ENDAT 命令を使用することもできます。

以下のプログラムは、論理データベース F1S にリンクしているものと仮定します。
REPORT DEMO.
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 of LOOP'.
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 of LOOP'.
ENDAT.
ENDLOOP.
抽出データセットが登録され、抽出データの書込の例で示したのと同じ方法で書き込まれます。データ読込は、END-OF-SELECTION イベントの前に終了します。このイベントでは、ループを使用してデータセットが 1 回読み込まれます。
制御命令 AT FIRST および AT LAST は、1 つの行と 1 つのアンダースコア行を一覧に書き込むようにシステムに指示します (1 回はループの最初、もう 1 回はループの最後に) 。
制御命令 AT <fgi> は、2 つの各レコードタイプに対応する項目を出力するようにシステムに伝えます。WITH FLIGHT_DATE オプションを使用すると、項目グループ FLIGHT_DATE のレコードが最低 1 つ続く場合、つまり、論理データベースがフライト日付を最低 1 つ渡している場合、項目グループ FLIGHT_INFO のレコードだけが表示されます。
出力一覧の最初は、次のように表示されます。

レコードタイプ FLIGHT_INFO の HEADER 部分に、項目 SFLIGHT-FLDATE の内容が # 記号として表示されています。これは、論理データベースによって、階層レベルの処理完了時に、その階層レベルの全項目に値 HEX 00 が書き込まれているからです。この機能は、抽出データセットの制御レベルのソートおよび処理において重要です。