【ABAP】1分で理解できる!INSERT命令―レコード挿入

ABAP

DB/内部テーブルへのレコード追加を行うINSERT文について解説します。

INSERT文は、追加したいレコード数や追加方法に応じて利用するオプションが結構たくさんあるので割と奥が深い命令です。

このページでは、利用できるオプションも含めて実践で役立つ内容を網羅的に整理していきます。

このページで学べる内容
  • INSERT命令の使い方【基本編】
  • APPEND命令との違い
  • 単一レコード/複数レコードの挿入方法
  • ACCEPTING DUPLICATE KEYオプションの意味と使い方

ABAPerであれば、最低限理解しておきたい基本知識です。

是非最後までご覧いただき、INSERT命令をマスターしておきましょう。

スポンサーリンク
スポンサーリンク

INSERT命令とは?

INSERTとは英語で「挿入」という意味になります。その名の通り、データベース/内部テーブルにレコードを挿入する命令です。

似たような命令にAPPEND命令があります。APPEND命令も、INSERT命令と同様、内部テーブルにレコードを追加することができるのですが、両者は挿入方法に微妙な違いがあります。

INSERT命令とAPPEND命令の違い

INSERT命令は、テーブルの任意の行にレコードを追加できるのに対して、APPEND命令ではレコードをテーブルの最後の行にしか追加することができません。

APPEND命令

APPEND命令は、内部テーブルの最後の行に作業エリアの内容を挿入する命令です。

INSERT命令

APPEND命令をさらに詳しく知りたい方は

尚、パフォーマンスの観点から言うと、APPEND命令が優れているため、レコードの追加位置を特に問わない場合はAPPEND命令を利用するのがおすすめです。

ただし、データベースへのレコード追加の場合はAPPEND命令は利用できないため、INSERT命令を利用する必要があります。

ここからは、具体的な構文ルールとINSERT命令の使い方を確認していきます。

構文ルール:INSERT命令

INSERT命令は、追加する先がデータベース(実テーブル)なのか?内部テーブルなのか?で構文ルールが異なります。

初心者の方ほど、この区別で混乱してしまうケースが多々あります。

ここでは、それぞれの構文ルールを1つずつ解説していきます。

DBへのレコード挿入(単一レコード)

INSERT INTO(DBテーブル)VALUES(構造名).

※「INSERT INTO(DBテーブル名) FROM (構造名).」 でも可


(構造)に保持しているレコードをDBテーブルに挿入します。

もちろん、(構造)は挿入先のテーブル(データベース)と同一の構造である必要があります。

正常にレコードが挿入された場合は、SY-SUBRCには0が。エラーの場合は4が設定されます。

DBへのレコード挿入(複数レコード)

INSERT INTO (DBテーブル) FROM TABLE(内部テーブル).


複数レコードを挿入する場合も、基本的な概念は同じです。

指定した内部テーブルに格納されているレコードを、DBテーブルに挿入します。

単一の場合は、オプションに「VALUE+構造名」を指定しましたが、複数の場合は「FROM+内部テーブル」となる点が異なります。

挿入するレコードが複数の場合、全てのレコード処理が正常に終了した場合にはリターンコードは0で返ってきます。ただし、1つでも正常に処理されなかった場合、処理が無かったことになります(処理が全件破棄されます)。

もし、正常に挿入できた分だけはそのまま破棄しないでほしい!という場合は以下のオプションを付けることで可能になります。

ACCEPTING DUPLICATE KEYSオプション

INSERT INTO(テーブル名) FROM TABLE(内部テーブル名)ACCEPTING DUPLICATE KEYS.


ACCEPTING DUPLICATE KEYSオプション」を指定した場合、全ての操作が破棄されるのではなく、正常に終了したレコードはそのままデータベースに挿入される形になります。正常に挿入が行われたレコードの数は、システム項目「SY-DBCNT」にセットされます。

通常、内部テーブルからレコード挿入する場合には、ACCEPTING DUPLICATE KEYSオプションを利用することが推奨されます。

内部テーブルへのレコード挿入(単一レコード)

INSERT (構造) INTO TABLE (内部テーブル) .


内部テーブルへ挿入する場合は、APPEND命令と似たような形をとります。

特に何もオプションを指定しない場合、APPEND命令と全く同じで内部テーブルの最後の行への挿入が行われます。もし、挿入する行を指定したい場合は「INDEXオプション」を利用します。

INDEXオプション

INSERT (構造) INTO TABLE (内部テーブル) INDEX(インデックス).


INDEXとは簡単に言えば、行番号です。

「INDEX 1」とすれば、内部テーブルの先頭にレコードが挿入されます。

内部テーブルへのレコード挿入(複数レコード)

INSERT LINES OF (内部テーブル) INTO TABLE (内部テーブル) .

単一レコードの場合との違いは、INSERTの直後に内部テーブルであることを示す「LINES OF」を記述する点です。

それ以外の動きは、全く同じです。

INSERT命令は、追加する対象(内部テーブル/実テーブル)で書き方が変わり、また追加するレコードの数に応じてもさらに記述方法が分岐します。

この点、初心者の方ほど特に混乱しがちになってしまう部分なので、何度も復習するようにしておきましょう。

ABAPを1から勉強したい方は

ABAPを1から学習したい方のために、ABAPの基本知識・基礎概念を1つのページにまとめました。

現在、完全無料で公開しておりますので、是非ご覧ください!

タイトルとURLをコピーしました