テーブル行の操作

 

このトピックはテーブルのデータ行に対して、読み込みや変更などの操作方法を取り上げて説明します。

内部テーブルから単一行を読み込みするには、以下の命令を使用します。

  • READ TABLE itab search-key search-result.

検索キーを指定

読み込む対象となるデータ行の検索キーを指定する方法を説明します。

(1)テーブルキー指定

検索キーとして itab のテーブルキーを使用するには、以下のように key を入力します。

  • READ TABLE itab FROM wa result.

または

  • READ TABLE itab WITH TABLE KEY k1 = f1 … kn = fn result.

全タイプの内部テーブルに対して、この方法を利用することができます。

(2)任意キー指定

テーブルキー以外の項目も検索キーとして指定することができます。

  • READ TABLE itab WITH KEY k1 = f1 … kn = fn result.

標準テーブルの場合、「BINARY SEARCH」をつけて検索の高速化を図ることができます。これは、標準テーブルが検索キー項目によってソートされていることを前提にしています、そうではない場合、エラーにならないが、意図しないデータ行が読み出されることになってしまいます。

(3)index指定

標準テーブルおよびソートテーブルに限りますが、読み込む行のテーブル索引を明示的にidxによって指定することができます。

  • READ TABLE 読出元の内部テーブル INTO 読み出し先構造 INDEX idx

idx は、i 型のデータオブジェクトである必要があります。

取得できたかをチェック

対象データが取得できた場合と取得できなかった場合、それぞれ以下のようにシステム項目に値が設定されます。

  • 取得できた場合
    • sy-subrc: 0
    • sy-tabix: 取得された行のインデックス
  • 取得できなかった場合
    • sy-subrc: エラーコード(0でない数字)

対象行のデータを照会

検索対象行のデータを照会するには、作業領域かフィールドシンボルかを使用することができます。

  • 作業領域を使用
    READ TABLE itab key INTO wa
  • フィールドシンボルを使用
    READ TABLE itab key ASSIGNING <fs>.

対象データ行の内容を関心せず、対象データが存在しているかどうかのみをチェックする場合があります。その際、「READ TABLE」命令に「NO FIELDS」オプションをつけることができます。

単一行挿入

単一行を内部テーブルの特定の箇所に挿入する場合は、「INSERT」を使用します。

  • INSERT wa INTO TABLE itab INDEX idx.

複数行挿入

複数行を内部テーブルの特定の箇所に挿入する場合は「INSERT LINES OF」を使用します。

  • INSERT LINES OF itab1 FROM idx1_1 TO idx1_2 INTO TABLE itab2 INDEX idx2.

単一行変更

単一行を変更するには、以下の命令を使用します。

  • MODIFY TABLE itab FROM wa [TRANSPORTING f1 f2 …].

複数行変更

条件を使用して 1 行または複数行を変更するには、以下の命令を使用します。 MODIFY itab FROM wa TRANSPORTING f1 f2 …WHERE cond.

単一行削除

内部テーブルの単一行を削除する場合は、DELETE 命令を使用します。

  • DELETE TABLE itab FROM wa.

または

  • DELETE TABLE itab WITH TABLE KEY k1 = f1 … kn = fn.

または

  • DELETE TABLE itab Index idx

複数行削除

内部テーブルの行を複数まとめて削除する場合には、「DELETE .. WHERE」文を使用します。

  • DELETE TABLE itable WHERE key = value.

内部テーブルを走査するには、命令LOOP~ENDLOOPを使用します。 FROM を指定できるのは、 標準テーブルおよび ソートテ ーブルの場合に限られます。 すべてのテーブルデータ型について WHERE を指定することができます。

  DATA : T_WITH_ITEM TYPE TABLE OF WITH_ITEM,
         W_WITH_ITEM TYPE WITH_ITEM.
* 処理         
  LOOP AT T_WITH_ITEM INTO W_WITH_ITEM WHERE
     BELNR = W_BELNR AND
     BUZEI = W_BUZEI.        
* 処理  
  ENDLOOP.