!--a11y-->

同じ一次キーを持つ行がテーブルにすでにあるかどうかにかかわらずデータベーステーブルに行を挿入するには、以下を使用します。
MODIFY < 対象> < 行>.
データベーステーブルに、挿入する行と同じ一次キーを持つ行がない場合は、MODIFY は INSERT と同様に機能し、行が追加されます。
データベーステーブルに、挿入する行と同じ一次キーを持つ行がすでにある場合は、MODIFY は UPDATE と同様に機能し、行が変更されます。
パフォーマンスのため、ABAP プログラムでこれら 2 つのオプションの区別がつかない場合にだけ MODIFY を使用します。
データベーステーブル < 対象> の 1 行または複数行 < 行> を追加または変更することができます。ABAP ディクショナリビューの行の挿入または変更は、ビューに 1 つのテーブルからの項目が含まれ、更新ステータスが読込と変更に定義されている場合にかぎり実行することができます。データベーステーブル < 対象> を静的または動的に指定します。
データベーステーブルを静的に指定するには、< 対象> に以下を入力します。
MODIFY <dbtab> [CLIENT SPECIFIED] < 行>.
ここで <dbtab> は、ABAP ディクショナリで定義されたデータベーステーブルの名称です。
データベーステーブルを動的に指定するには、< 対象> に以下を入力します。
MODIFY (< 名称>) [CLIENT SPECIFIED] < 行>.
ここで項目 < 名称> は、ABAP ディクショナリで定義されたデータベーステーブルの名称です。
CLIENT SPECIFIED オプションを使用して、自動クライアント処理を無効にすることができます。
データベーステーブルの単一行を挿入または変更するには、以下を使用します。
MODIFY < 対象> FROM <wa>.
作業領域 <wa> の内容がデータベーステーブル<dbtab> に書き込まれます。作業領域 <wa> は、データベーステーブルの行構造と少なくとも同じ桁数および整列のデータオブジェクトでなければなりません。データは、作業領域の構造にかかわらず、テーブルの行構造にもとづいてデータベーステーブルに配置されます。データベーステーブルの構造を参照して作業領域を定義することが賢明です。
作業領域で指定されたのと同じ一次キーを持つ行がデータベーステーブルにない場合は、新しい行が挿入されます。作業領域で指定されたのと同じ一次キーを持つ行がすでにデータベーステーブルにある場合は、既存の行が上書きされます。SY-SUBRC は常に 0 に設定されます。
上記の命令の短縮形は MODIFY <dbtab> です。
この場合、テーブル作業領域 <dbtab> の内容は同じ名称のデータベーステーブルに挿入されます。このテーブル作業領域は TABLES 命令を使って宣言しなければなりません。この場合、データベーステーブルの名称を動的に指定することはできません。データベーステーブルと同じ名称のテーブル作業領域 ( リリース 4.0 以前では必須) を明確化のために使用する必要はなくなりました。
データベーステーブルの複数行を挿入または変更するには、以下を使用します。
MODIFY < 対象> FROM TABLE <itab>.
同じ一次キーを持つデータベーステーブルの行がない内部テーブル <itab> の行がテーブルに挿入されます。同じ一次キーを持つデータベーステーブルの行がすでにある内部テーブル <itab> の行が、データベーステーブルの既存行を上書きします。前述の作業領域 <wa> と同じ原則が <itab> の行データ型にも適用されます。
SY-SUBRC は常に 0 に設定されます。SY-DBCNT は内部テーブルの行数に設定されます。