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>>を用いることが推奨されます。