!--a11y-->

データベーステーブルへデータを挿入するためのオープン SQL 命令は INSERT INTO < 対象> < 行> です。
この命令によって、データベーステーブル < 対象> へ 1 行または複数行を挿入することができます。ABAP ディクショナリビューへの行の挿入は、ビューに 1 つのテーブルからの項目が含まれ、更新ステータスが読込と変更に定義されている場合にかぎり実行することができます。データベーステーブル < 対象> を静的または動的に指定します。
データベーステーブルを静的に指定するには、< 対象> に以下を入力します。
INSERT INTO <dbtab> [CLIENT SPECIFIED] < 行>.
ここで <dbtab> は、ABAP ディクショナリで定義されたデータベーステーブルの名称です。
データベーステーブルを動的に指定するには、< 対象> に以下を入力します。
INSERT INTO (< 名称>) [CLIENT SPECIFIED] < 行>.
ここで項目 < 名称> は、ABAP ディクショナリで定義されたデータベーステーブルの名称です。
CLIENT SPECIFIED オプションを使用して、自動クライアント処理を無効にすることができます。
データベーステーブルへ単一行を挿入するには、以下を使用します。
INSERT INTO < 対象> VALUES <wa>.
作業領域 <wa> の内容がデータベーステーブル<dbtab> に書き込まれます。作業領域 <wa> は、データベーステーブルの行構造と少なくとも同じ桁数および整列のデータオブジェクトでなければなりません。データは、作業領域の構造にかかわらず、テーブルの行構造にもとづいてデータベーステーブルに配置されます。データベーステーブルの構造を参照して作業領域を定義することが賢明です。
データベーステーブルに、作業領域で指定されたものと同じ一次キーを持つ行がない場合、作業は正常に終了し、SY-SUBRC は 0 に設定されます。それ以外の場合、行は挿入されず、SY-SUBRC は 4 に設定されます。
また、以下の INSERT 命令の短縮形を使用して、単一行を挿入することもできます。
INSERT < 対象> FROM <wa>.
VALUE ではなく FROM を使用することで、INTO 句を省略することができます。さらに短縮すると以下のようになります。
INSERT <dbtab>.
この場合、テーブル作業領域 <dbtab> の内容は同じ名称のデータベーステーブルに挿入されます。このテーブル作業領域は TABLES 命令を使って宣言しなければなりません。この場合、データベーステーブルの名称を動的に指定することはできません。データベーステーブルと同じ名称のテーブル作業領域 ( リリース 4.0 以前では必須) を明確化のために使用する必要はなくなりました。
データベーステーブルへ複数行を挿入するには、以下を使用します。
INSERT < 対象> FROM TABLE <itab> [ACCEPTING DUPLICATE KEYS].
これにより、1 つの操作で、内部テーブル <itab> のすべての行がデータベーステーブルへ書き込まれます。前述の作業領域 <wa> と同じ原則が<itab> の行データ型にも適用されます。
内部テーブルからの行をすべて挿入できる場合、SY-SUBRC は 0 に設定されます。データベースにすでに同じ一次キーを持つ行が含まれているために 1 つまたは複数の行が挿入できない場合、実行時エラーが発生します。オプション ACCEPTING DUPLICATE KEYS を使用して実行時エラーの発生を防ぐことができます。この場合、実行時エラーの発生原因となりうる行が拒否され、SY-SUBRC は 4 に設定されます。
システム項目SY-DBCNT には、SY-SUBRC の値にかかわらず、データベーステーブルに挿入された行数が含まれます。
データベーステーブルに複数行を挿入する場合は、1 行ずつ挿入するよりも内部テーブルを利用した方が効率的です。

単一行の追加
TABLES SPFLI.
DATA WA TYPE SPFLI.
WA-CARRID = 'LH'.
WA-CITYFROM =
'WASHINGTON'.
...
INSERT INTO SPFLI VALUES
WA.
WA-CARRID =
'UA'.
WA-CITYFROM =
'LONDON'.
...
INSERT SPFLI FROM
WA.
SPFLI-CARRID = 'LH'.
SPFLI-CITYFROM
= 'BERLIN'.
...
INSERT
SPFLI.
このプログラムでは、INSERT 命令の可能性のある 3 つのバリアントをそれぞれ使用して、単一行をデータベーステーブル SPFLI に挿入します。
最終行の
INSERT SPFLI
の代わりに、より長い
INSERT SPFLI FROM SPFLI
または
INSERT INTO SPFLI VALUES SPFLI
を使用することができます。
したがって、名称 SPFLI は一意ではありません。

DATA: ITAB TYPE HASHED
TABLE OF SPFLI
WITH UNIQUE KEY CARRID CONNID,
WA LIKE
LINE OF ITAB.
WA-CARRID = 'UA'.WA-CONNID =
'0011'.WA-CITYFROM = ...
INSERT WA INTO
TABLE ITAB.
WA-CARRID = 'LH'.WA-CONNID =
'1245'.WA-CITYFROM = ...
INSERT WA INTO
TABLE ITAB.
WA-CARRID = 'AA'.WA-CONNID =
'4574'.WA-CITYFROM = ...
INSERT WA INTO
TABLE ITAB.
...
INSERT SPFLI FROM TABLE ITAB ACCEPTING DUPLICATE KEYS.
IF SY-SUBRC = 0.
...
ELSEIF
SY-SUBRC = 4.
...
ENDIF.
この例では、ハッシュテーブル ITAB に書き込み、その内容をデータテーブル SPFLI に挿入します。操作が成功したかどうかをチェックするため、SY-SUBRC の内容を確認します。