広告

posted by fanblog

2020年02月10日

【ABAP】LOOP—ループ処理のツボ


本ページでは、内部テーブルに対する処理の中で最も使用頻度が高いループ処理について解説します。

一口に「ループ処理」といっても、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処理とは?


"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
posted by busyjife at 15:32| Comment(0) | TrackBack(0) | ABAP LOOP
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/9623181
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
Build a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: