コンテンツフレーム起動

行の変更 文書を SAP ライブラリストラクチャに組み込む

内部テーブルの単一の行を変更するには、MODIFY 命令を使用します。テーブルキーを使用してそのキーを使用する単一の行を検索して変更するか、特定の条件を満たす複数の行を検索して変更することができます。テーブルのキーが一意でなく、重複エントリがある場合は、最初のエントリが変更されます。

テーブルキーを使用した行の変更

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

MODIFY TABLE <itab> FROM <wa> [TRANSPORTING <f1> <f2> ...].

作業領域 <wa> ( 内部テーブルの行データ型と互換性がなければなりません) は、この命令では 2 つの役目を果たします。つまり、変更する行を検索するために使用されるだけでなく、新しい内容が格納されます。内部テーブルで、テーブルキーが<wa> のキー項目と一致する行が検索されます。

以下のように関連する行が検索されます。

        標準テーブル

ライナー検索。この検索では実行時間がテーブルエントリ数と正比例します。最初に検出されたエントリが変更されます。

        ソートテーブル

バイナリ検索。この検索では、実行時間がテーブルエントリ数と対数比例します。最初に検出されたエントリが変更されます。

        ハッシュテーブル

内部テーブルのハッシュアルゴリズムを使用してエントリが検索されます。実行時間はテーブルエントリ数とは無関係です。

行が検出されると、作業領域の非キー項目の内容が対応する行の項目にコピーされ、SY-SUBRC 0 に設定されます。行が検出されない場合は、SY-SUBRC 4 に設定されます。テーブルのキーが一意でない場合に、重複エントリが検出されると、最初のエントリが変更されます。

TRANSPORTING オプションで、テーブル行に割り当てる非キー項目を指定することができます。また、(<n i>) の書式で項目 <n i> の内容として項目 <f i> を動的に指定することもできます。命令の実行時に <n i> が空である場合は、その項目は無視されます。オフセットと長さを指定して、検索を一部の項目に制限することができます。

複雑な行構造を持つテーブルの場合、不要なテーブル類似のコンポーネントが転送されてはならないときに、転送オプションを使用することによってパフォーマンスが向上します。

条件を使用した複数の行の変更

条件を使用して行を変更するには、以下の命令を使用します。

MODIFY <itab> FROM <wa> TRANSPORTING <f1> <f2> ...WHERE <cond>.

この命令によって、論理条件 <cond> を満たすすべての行が処理されます。論理条件は、複数の比較で構成することができます。各比較では、最初のオペランドが行構造のコンポーネントでなければなりません。テーブルの行が構造化されていない場合、最初のオペランドを式 TABLE LINE にすることもできます。このようにすると、比較が行全体に適用されます。

作業領域 <wa> ( 内部テーブルの行データ型と互換性がなければなりません) には新しい内容が格納されます。この内容は、TRANSPORTING オプションを使用して関連するテーブル行に割り当てられます。前述の MODIFY 命令とは異なり、ここではTRANSPORTING オプションは任意指定ではありません。さらに、内部テーブルが標準テーブルである場合は、その内部テーブルのキー項目しか変更することができません。SY-SUBRC は、1 行でも変更された場合は 0 に設定され、行が変更されなかった場合は 4 に設定されます。

 例

DATA: BEGIN OF LINE,
        COL1 TYPE I,
        COL2 TYPE I,
      END OF LINE.

DATA ITAB LIKE HASHED TABLE OF LINE WITH UNIQUE KEY COL1.

DO 4 TIMES.
   LINE-COL1 = SY-INDEX.
   LINE-COL2 = SY-INDEX ** 2.
  INSERT LINE INTO TABLE ITAB.

ENDDO.

LINE-COL1 = 2. LINE-COL2 = 100.

MODIFY TABLE ITAB FROM LINE.

LOOP AT ITAB INTO LINE.
   WRITE: / LINE-COL1, LINE-COL2.
ENDLOOP.

出力は以下のようになります。

        1        1
         2      100
         3        9
         4       16

ハッシュテーブルに平方数の一覧が書き込まれます。MODIFY 命令によって、キー項目 COL1 の値が 2 のテーブルの行が変更されます。

 例

DATA: BEGIN OF LINE,
        COL1 TYPE I,
        COL2 TYPE I,
      END OF LINE.

DATA ITAB LIKE HASHED TABLE OF LINE WITH UNIQUE KEY COL1.

DO 4 TIMES.
  LINE-COL1 = SY-INDEX.
  LINE-COL2 = SY-INDEX ** 2.
  INSERT LINE INTO TABLE ITAB.

ENDDO.

LINE-COL2 = 100.

MODIFY ITAB FROM LINE TRANSPORTING COL2
            WHERE ( COL2 > 1 ) AND ( COL1 < 4 ).

LOOP AT ITAB INTO LINE.
  WRITE: / LINE-COL1, LINE-COL2.
ENDLOOP.

出力は以下のようになります。

        1        1
         2      100
         3      100
         4       16

ハッシュテーブルに平方数の一覧が書き込まれます。MODIFY 命令によって、項目 COL2 の内容が 1 より大きく、項目 COL1 の内容が 4 より小さいテーブルの行が変更されます。

 

 

 

 

コンテンツフレーム終了