ABAP

【ABAP】READ TABLE―内部テーブルの読み込み

本ページでは、READ TABLE命令による内部テーブルの読み込み処理について解説します。

ABAPでは、この内部テーブルの処理が鍵となりますので、丁寧に理解しておく必要があります。そのため本ページでは、構文ルールに加えて、各種オプションの指定方法、その他コーディング時の注意点も合わせて深堀して解説しています。

※尚、内部テーブルの宣言方法についてはこちらのページで解説していますので、合わせてご覧ください。

それでは早速解説を始めます。

READ TABLEとは

READ TABLEは、内部テーブルの単一行を読み込む命令です。

標準テーブル・アドオンテーブルから項目を選択する場合はSELECT命令ですが、内部テーブルの場合はREAD TABLEです。意外と、初心者に人ほどこの罠に陥ることが多いのでしっかり区別しておきましょう。

  • READ  ⇒ 内部テーブルの読み込み
  • SELECT ⇒ 標準・アドオンテーブルの選択

※READ TABLEは、あくまでも単一行の読み込みです。SELECT-SINGLE命令と同じような処理になります。

構文ルール:READ TABLE

READ TABLE (内部テーブル) INTO (構造)
  WITH KEY A = A’
         B = B’ .

利用シーンに応じて様々オプションはありますが、最もよく使う基本形です。この形で覚えておくと良いでしょう。

READ TABLEの処理内容

READ TABLEは指定した内部テーブルから単一行を読み込みます。

では、どの行を読み込むか?

それを、WITH KEYの後に指定してします。

WITH KEY VBELN = ‘100000000’」 とすれば、受注伝票 100000000のレコード(行)が対象となります。仮に、読み込む行が一意にならない場合は、最初に一致するレコードが読み込み対象となります。

ここらへんもSELECT-SINGLEの処理と同じですね。

読み込んだレコードを INTO の後に指定した構造に格納し、後続の処理に進むことになります。(必ずしもINTOでなくてもOKです。詳細は次章にて解説。)

ちなみに、レコードの読み込みに成功した場合は、SY-SUBRCには「0」が、失敗した場合には「4」が設定されます。

ASSIGNING:フィールドシンボルを利用する場合

読み込んだレコードは必ずしも、INTO の後に指定した構造に格納するわけではありません。

1つ目の方法が、フィールドシンボルを利用するパターンです。

フィールドシンボルを利用する場合の構文は以下のよう「ASSIGNING」を利用します。

READ TABLE (内部テーブル)
  ASSIGNING フィールドシンボル
  WITH KEY A = A’
         B = B’ .

フィールドシンボルについては、別途解説したページを載せておきます。

TRANSPORTING NO FIELDS
:レコードを格納しない

使用頻度は低いですが、読み込んだ内部テーブルのレコードをどこにも格納しないという指定も可能です。

TRANSPORTING NO FIELDS」オプションは、レコードを格納せずにシステム項目だけを設定するオプションです。先ほど説明した通り、READ TABLEが成功すればSY-SUBRCには「0」、失敗すれば「4」が入ります。

READ TABLE (内部テーブル) TRANSPORTING NO FIELDS
  WITH KEY A = A’
         B = B’ .

この処理は「レコードが存在するかどうかだけ知りたい場合」に用います。