MODIFY

15.3 MODIFY

3. MODIFY

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

MODIFY

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

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

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

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

「サンプルコード」①

1REPORT ZCUSLIST1_K_MODIFY_K.
2TYPES:
3      BEGIN OF ST_LINE,
4        COL1 TYPE I,
5        COL2 TYPE I,
6      END OF ST_LINE.
7 
8DATA LINE TYPE ST_LINE.
9 
10DATA ITAB TYPE SORTED TABLE OF ST_LINE WITH NON-UNIQUE KEY COL1.
11 
12DO 4 TIMES.
13  LINE-COL1 = SY-INDEX.
14  LINE-COL2 = SY-INDEX ** 2.
15  APPEND LINE TO ITAB.
16ENDDO.
17 
18LINE-COL1 = 2.
19LINE-COL2 = 100.
20 
21MODIFY TABLE ITAB FROM LINE.
22 
23LOOP AT ITAB INTO LINE.
24  WRITE: / LINE-COL1, LINE-COL2.
25ENDLOOP.

「サンプルコード」②

1REPORT ZCUSLIST1_K_MODIFY_KANDA.
2TYPES:BEGIN OF ST_LINE,
3        COL1 TYPE I,
4        COL2 TYPE I,
5      END OF ST_LINE.
6 
7DATA LINE TYPE ST_LINE.
8 
9DATA ITAB TYPE SORTED TABLE OF ST_LINE WITH UNIQUE KEY COL1.
10 
11DO 4 TIMES.
12  LINE-COL1 = SY-INDEX.
13  LINE-COL2 = SY-INDEX ** 2.
14  APPEND LINE TO ITAB.
15ENDDO.
16 
17LINE-COL2 = 100.
18 
19MODIFY  ITAB FROM LINE INDEX 2 TRANSPORTING COL2.
20 
21LOOP AT ITAB INTO LINE.
22  WRITE: / LINE-COL1, LINE-COL2.
23ENDLOOP.

実行結果

補足(MODIFY TABLEについて)

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

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


NEXT>> 15.4 DELETE

f