2020年02月10日
【ABAP】LOOP―ループ処理のツボ
本ページでは、内部テーブルに対する処理の中で最も使用頻度が高いループ処理について解説します。
一口に「ループ処理」といっても、ABAPには4種類(LOOP〜ENDLOOP・SELECT〜ENDSELECT・DO〜ENDDO・WHILE〜ENDWHILE)存在するのですが、実際にABAPerが口にする「ループ処理」はタイトルにある「LOOP〜ENDLOOP」の構文を指していることがほとんどです。
以上を踏まえて、ABAPのループ処理、今回は最も基本となる「LOOP〜ENDLOOP」について説明していきます。
目次
1 LOOP処理とは?
2 構文ルール:LOOP〜ENDLOOP
2.1 LOOP〜ENDLOOP
2.2 LOOP AT(内部テーブル)INTO(構造)
3 WHEREオプション
4 FROM / TO オプション
5 ループ処理の注意点
6 フィールドシンボルとの組み合わせ
1 LOOP処理とは?
2 構文ルール:LOOP〜ENDLOOP
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
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/9623181
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック