PR

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

ABAP

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

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

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

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

ABAPerを目指す方であれば知らないと恥ずかしい超・基本知識です。是非最後までご覧ください。

スポンサーリンク

INSERT命令とは?

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

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

INSERT命令の構文ルールを学ぶ前に、APPEND命令とINSERT命令の違いだけ説明しておきます。

INSERT命令とAPPEND命令の違い

INSERT vs APPEND
  • INSERT命令
    内部テーブル/データベース両方の操作で利用できる
  • APPEND命令
    内部テーブルの操作のみに利用できる

まず、初心者ほど間違いやすいのですが、APPEND命令はデータベースへのレコード追加では利用できません。この点は前提として理解しておきましょう。

また、同じ内部テーブルに対しても処理の仕方に以下のような違いが存在します。

INSERT vs APPEND
  • INSERT命令
    任意の場所にレコードを追加できる
  • APPEND命令
    追加するレコードは一番最後の行

INSERT命令

APPEND命令

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

INSERTでは、好きなところにレコード挿入ができるのに対して、APPENDは一番最後にだけレコード追加ができるということです。

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

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

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

構文ルール:INSERT命令

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

この区別で混乱してしまうケースが多々あります。

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

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

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

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

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

(構造)に保持しているレコードをDBテーブルに挿入します。もちろん、(構造)は挿入先のテーブル(データベース)と同一の構造である必要があります。

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

SY-SUBRCとは?

SY-SUBRCは、SAPにおけるBoolean型のような役割を担う変数のようなものです。

システム項目は、ABAPを学ぶ上での超・必須知識ですので、理解できていない方はこの機会に合わせて必ず理解しておきましょう。

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

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

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

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

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

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

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

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

ACCEPTING DUPLICATE KEYSオプション

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

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

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

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

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

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

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

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

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

INDEXオプション

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

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

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

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

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

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

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

単一レコードの場合との違いは、INSERTの直後に内部テーブルであることを示す「LINES OF」を記述する点です。それ以外の動きは、全く同じです。

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

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

SAP / ABAPを1から学習したい方は

初めてABAPを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。

ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?

あなたの技術、もっと価値ある場所で活かしませんか?
SAPエンジニアのキャリア支援はこちらから↓

No.1 > 外資系・IT業界などハイクラスの転職なら【アクシスコンサルティング】blank
4人に1人のコンサルタントが選ぶパートナー!
ビッグ4やアクセンチュアへの転職を実現し年収1000万へ。

No.2 > IT・Web転職特化エージェント【レバテックキャリアblank
blank
サービス利用者数20万人突破。

平均年収アップ率77%であなたの転職成功を保証します。

No.3 > blankリクルートエージェント
blank
\転職支援実績NO.1/

応募が殺到しすぎるが故に・・・非公開にせざるを得ない魅力的な求人が多数!

読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
ABAPSAP
シェアする
ビズドットオンラインをフォローする
blank
ビズドットオンライン
タイトルとURLをコピーしました