差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

kdict:abap:16:46:36 [2016/06/21 17:12]
kdict:abap:16:46:36 [2019/12/06 06:53] (現在)
行 1: 行 1:
 +======テーブル行の操作 ======
 +{{page>kdict:abap:adsense:ads_content_header&nouser&nodate&nomdate&noeditbtn}}
 +このトピックはテーブルのデータ行に対して、読み込みや変更などの操作方法を取り上げて説明します。
  
 +=====読み込み=====
 +内部テーブルから単一行を読み込みするには、以下の命令を使用します。
 +  * 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 を指定することができます。 
 +<code>
 +  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.      
 +</code>