差分
このページの2つのバージョン間の差分を表示します。
— |
kdict:abap:16:46:36 [2019/12/06 06:53] (現在) |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | ======テーブル行の操作 ====== | ||
+ | {{page> | ||
+ | このトピックはテーブルのデータ行に対して、読み込みや変更などの操作方法を取り上げて説明します。 | ||
+ | =====読み込み===== | ||
+ | 内部テーブルから単一行を読み込みするには、以下の命令を使用します。 | ||
+ | * 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, | ||
+ | | ||
+ | * 処理 | ||
+ | LOOP AT T_WITH_ITEM INTO W_WITH_ITEM WHERE | ||
+ | BELNR = W_BELNR AND | ||
+ | BUZEI = W_BUZEI. | ||
+ | * 処理 | ||
+ | ENDLOOP. | ||
+ | </ |