本ページでは、ABAPで用いる内部テーブルの一種「レンジテーブル(Range Table)」について解説します。レンジテーブルはその名の通り「範囲を保持するテーブル」です。これを理解すると、パフォーマンスに優れたABAPプログラミングが可能になります。
初心者にとっては、難しく感じてしまう特殊なテーブルですが、イメージ図を見ながら考えれば実は難しくはありません。
ABAPエンジニアを目指す方であれば、知らないと恥ずかしい基本中の基本知識です。是非最後までご覧ください。
それでは、早速解説を始めます。
前提:内部テーブルとは?
まずは前提から。このページで解説するレンジテーブルとは、内部テーブルの一種です。
内部テーブルとは、変数や構造と同じようにプログラム実行時にのみ存在するテーブルのこと。DB(データベース)から取得したレコードを一時的に保持し、必要であれば保持したデータを編集したりする場合に利用されます。
変数や、構造も内部テーブルと同様、プログラム実行時にのみ存在する一時的なメモリ領域です。
内部テーブルの基本理解と合わせて、変数や構造が一体何者なのか?という知識も合わせて習得しておくことがおすすめです。
レンジテーブルは内部テーブルの一種
内部テーブルはその用途や特徴に応じて以下の4種類に分類することができます。
このページで解説するレンジテーブル以外の内部テーブル「標準テーブル」「ソートテーブル」「ハッシュテーブル」については、以下のページで詳しく解説しております。この機会に合わせて学習しておきましょう。
レンジテーブルだけ、なぜ別に解説ページを設けているかと言うと、他の3つの内部テーブルと大きく特徴が異なるためです。その分、ABAP初心者はレンジテーブルの理解で躓くことが多いのです。
レンジテーブルは一体どんな特徴を持つのか?詳しく見ていきましょう。
レンジテーブル(Range Table)とは?
「レンジテーブル」はその名の通り、値の”範囲”を持たせることができる内部テーブルの一種です。”Range” は日本語で「範囲」という意味で、そのためABAPerによっては「範囲テーブル」と呼ぶ場合もあります。
レンジテーブルは「範囲(ここからここまで)」という情報のみを保持しており、全てのレコードデータを保持しているわけではありません。あくまでも範囲しか持たないテーブルを「レンジテーブル」と呼びます。
一体どういうことか。
文章で説明しただけではイマイチ理解できないかと思いますので、イメージ図を参考に説明していきます。以下の「成績表テーブル」を基に考えていきましょう。
このテーブルには出席番号/氏名/成績が保持されています。このテーブルを基に、「全員の出席番号だけ」を取得したいとします。
レンジテーブルを用いない場合、このようにレコード数分と同じだけの行が必要になります。もちろん、上記のように普通の内部テーブルでも「出席番号を取得する」という目的は達成できますが、メモリ領域にそれだけのレコード数を保持しなければなりません。
※メモリを利用すればするほど、プログラムのパフォーマンスが悪化します。(実行速度が遅くなります。)
上記の例では、出席番号を例にしていますが、例えばこれが大学全体の1万人のうち、「2000~9999の出席番号がほしい」なんていう場合はなおさら、パフォーマンス悪化の原因になります。
そこで考え出されたのが「レンジテーブル」です。上記の例を「レンジテーブル」を用いて表現した結果がこちら。
これが「レンジテーブル」です。「レンジテーブル」を利用すれば30行のデータをたった1行で表すことができるのです。SIGNとかOPTIONとかあらかじめ決められた項目を理解できれば、これ以上難しい説明は不要です。
レンジテーブルのコーディング方法と各項目の意味について解説していきます。
構文ルール:TYPE RANGE OF~
DATA (レンジテーブル名) TYPE RANGE OF (テーブル名―項目名)
DATA LV_DENPYO TYPE RANGE OF BKPF-BELNR.
便宜的に例で取り上げた「成績表テーブル」を例にコーディングすると以下のようになります。
DATA LV_PNUMBER TYPE RANGE OF 成績表テーブル-出席番号.
このようにコーディングすることで、SIGNやOPTIONなどの項目を持つレンジテーブルが宣言されます。コーディング自体は簡単ですね。
DATA命令は、内部テーブルや変数・構造を宣言する命令です。DATA命令って何だっけ?という方はこちらの記事をご覧ください。
ここからは、レンジテーブルの各項目の説明です。(ここからが一番重要かも?)
レンジテーブルの各項目説明
レンジテーブルは、4つの項目から成り立ちます。4つの項目、それぞれがどのような項目なのかをつかむことがレンジテーブルの理解のために必須です。1つずつ、丁寧に学習しておきましょう。
SIGN
”I” or ”E” が入ります。
指定した値(LOWとHIGH)を含む場合は "I"、 指定した値を含まない場合は "E" が入ります。
- Include(含む)の"I"
- Exclude(含まない)の"E"
の意味になります。"I" とした場合、LOW:1とHIGH:10とすれば、1~10のレンジテーブルができますが、"E" とすれば、2~9のレンジテーブルが作成されます。
OPTION
ここでは"BT"を入力します。
BETWEENの略です。これで、LOW項目とHIGH項目の「間」にあることを指定します。
OPTIONには、BT以外も利用可能ですが、基本BT以外を利用している場面を見かけたことがないのでとりあえずはBTを覚えておけばOK。
LOW
出席番号の例でいえば「1」、つまりどこからどこまで、の「どこから(FROM)」の値を入力します。
HIGH
出席番号の例でいえば「30」、つまりどこからどこまで、の「どこまで(TO)」の値を入力します。
レンジテーブルは、これら4つの項目で成り立つ内部テーブルですが、パフォーマンスを改善するためにかなり役立つ便利な構造のため、非常に利用頻度が高いです。
この辺の知識もしっかり身に着けておけば、「ただ動く機能」ではなく「効率的に動く」機能を作ることができるようになるため、しっかりと理解しておきましょう。
ABAPを1から勉強したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!