MODIFY

15.3 MODIFY

3. MODIFY

MODIFY は、内部テーブルの値を変更したい時に使用します。
オープンSQLのMODIFYはパフォーマンスが悪く、推奨されていませんが、内部テーブルの操作であれば問題ありません。

MODIFY

行の内部テーブルキーの内容と<構造>の内容のキーが一致する場合、その行は変更されるものと判定されます。一意でないキーがあるテーブルの場合、最初に見つかったエントリが変更されます。

構文①-2>>、更新する行数を指定することができます。
更新したい行数 と 内部テーブルの更新する項目名を<項目名>に設定します。

条件式による変更は、次のような構文になります。

この構文では、条件式に当てはまるレコードのく項目名>のみを変更することが可能です。
内部テ一ブルに条件式に当てはまるレコードが複数存在した場合、そのすべてを更新します。

「サンプルコード」①

REPORT ZCUSLIST1_K_MODIFY_K.
TYPES:
      BEGIN OF ST_LINE,
        COL1 TYPE I,
        COL2 TYPE I,
      END OF ST_LINE.

DATA LINE TYPE ST_LINE.

DATA ITAB TYPE SORTED TABLE OF ST_LINE WITH NON-UNIQUE KEY COL1.

DO 4 TIMES.
  LINE-COL1 = SY-INDEX.
  LINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB.
ENDDO.

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

MODIFY TABLE ITAB FROM LINE.

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

「サンプルコード」②

REPORT ZCUSLIST1_K_MODIFY_KANDA.
TYPES:BEGIN OF ST_LINE,
        COL1 TYPE I,
        COL2 TYPE I,
      END OF ST_LINE.

DATA LINE TYPE ST_LINE.

DATA ITAB TYPE SORTED TABLE OF ST_LINE WITH UNIQUE KEY COL1.

DO 4 TIMES.
  LINE-COL1 = SY-INDEX.
  LINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB.
ENDDO.

LINE-COL2 = 100.

MODIFY  ITAB FROM LINE INDEX 2 TRANSPORTING COL2.

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

実行結果

補足(MODIFY TABLEについて)

サンプル①の
MODIFY TABLE ITAB FROM LINE LIKE SY-INDEX
上記については、 内部テーブルがソートテーブルであるために” TABLE ” を記載しなければ
正常に動作しません。

ソートテーブルは自動でインデックス指定をするため、このような記述になっています。
しかし、こちらの想定しているレコードと異なるインデックスを指定する可能性もあるため
<<構文①-1>>を用いることが推奨されます。


NEXT>> 15.4 DELETE