本ページでは、内部テーブルに対する処理の中で最も使用頻度が高いループ処理について解説します。
一口に「ループ処理」といっても、ABAPには4種類(LOOP〜ENDLOOP・SELECT〜ENDSELECT・DO〜ENDDO・WHILE〜ENDWHILE)存在するのですが、実際にABAPerが口にする「ループ処理」はタイトルにある「LOOP〜ENDLOOP」の構文を指していることがほとんどです。
以上を踏まえて、ABAPのループ処理、今回は最も基本となる「LOOP〜ENDLOOP」について説明していきます。
目次
1 LOOP処理とは?
2.1 LOOP〜ENDLOOP
2.2 LOOP AT(内部テーブル)INTO(構造)
3 WHEREオプション
4 FROM / TO オプション
5 ループ処理の注意点
6 フィールドシンボルとの組み合わせ
1 LOOP処理とは?
2.1 LOOP〜ENDLOOP
2.2 LOOP AT(内部テーブル)INTO(構造)
3 WHEREオプション
4 FROM / TO オプション
5 ループ処理の注意点
6 フィールドシンボルとの組み合わせ
1 LOOP処理とは?
"LOOP" から始まる構文は、「同じ処理の繰り返し」を行います。
また、 "LOOP" は内部テーブルから「 特定のデータを抽出して処理を行う場合」に利用されます 。
2 構文ルール:LOOP〜ENDLOOP
LOOP AT (内部テーブル) INTO (構造).
・・・・
ENDLOOP.
基本となる構文は上記の通りです。ポイントは、 ?@LOOP処理を行う内部テーブルを指定することと、?ALOOP処理で対象となるレコードを格納する構造を指定すること です。
2.1 LOOP〜ENDLOOP
ループ処理は、LOOPとENDLOOPで囲んだ間に具体的な処理内容を記述します。
LOOPとENDLOOPの間に記述した処理は、特段の指定が無い場合内部テーブルのデータのレコード数分繰り返します。
データが100行あれば、100回処理を繰り返します。
50行であれば、50回の処理が行われます。
そのためLOOP命令では、DO/WHILE文で注意すべき「無限ループ」に陥ることはありません。
2.2 LOOP AT(内部テーブル)INTO(構造)
LOOPでは、内部テーブルを1行1行処理をしていきます。
このとき留意する必要があるのが、LOOP ATでは 指定した内部テーブルを直接処理するのではなく、一時的に別の構造に対象の行を格納して処理を進める 、という点です。
したがって、LOOP〜ENDLOOPには、 ?@対象の内部テーブルと ?A作業エリア(構造)の指定が必要となるのです。
3 WHEREオプション
LOOP AT (内部テーブル)INTO (構造)
WHERE (条件式).
・・・・
ENDLOOP.
LOOP命令では、 WHEREオプションを用いて処理の対象としたいレコードを特定することが可能 です。
4 FROM / TO オプション
LOOP AT (内部テーブル)INTO (構造)
FROM (数字) TO (数字).
・・・・
ENDLOOP.
FROM TOオプションを用いることで、LOOPするレコード数を制限することができます。
LOOP AT (内部テーブル)INTO (構造)
FROM 10 TO 20 .
・・・・
ENDLOOP.
とした場合は、10行目から20行目までのレコードが処理の対象となります。
WHEREオプションで制限するよりも、FROM TOオプションで制限したほうがパフォーマンスは良くなります 。
WHEREオプションは、全てのレコードが条件に合致するかどうか読み込みに行ってしまうためです。
5 ループ処理の注意点
LOOP〜ENDLOOPの処理を簡単にまとめます。
・内部テーブルを1行1行別の構造に格納し、当該構造に対し処理をすること
・データ数分繰り返しされる処理であること
・WHEREオプション/FROM TOオプションで処理対象を特定できる
以上を理解しておけばOKです。
1つの注意点としては、 LOOP処理の中に、また別のLOOP処理を記載するのができるだけ避けなければならないという点 です。
これは、パフォーマンスを非常に悪化させてしまう原因となるためです。
ABAPerの禁忌の一つですので、必ず他の手段を考えましょう。
6 フィールドシンボルとの組み合わせ
ここで紹介したLOOP処理は、 かなり初歩的(古い記述方式)なものです 。
実際には、フィールドシンボルと組み合わせて利用するシーンがほとんどですので、フィールドシンボルとセットで理解することがおすすめです。
タグ: ABAP