PR

【ABAP】APPEND命令:内部テーブルへの行追加3分で解説

ABAP

APPEND命令は、ABAPで内部テーブルにレコード(行)を追加するために使用されます。

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

処理の内容も構文ルールも難しくはありませんが、テーブル/内部テーブル/構造といった基本知識が必要になってきますので、まずそれらの用語の意味がよくわからない・・・という方は初めに以下の記事からお読みください。

参考 内部テーブル/構造/変数―ABAPの3つの基本

このページではAPPEND命令の意味や基本となる構文ルール、使いどころ・注意点について初心者向けに分かりやすく解説します。

このページで学べる内容
  • APPEND命令の使い方・書き方
    • APPEND命令の処理内容
    • APPEND命令を利用したサンプルコード
  • APPEND命令の注意点

SAPエンジニア/ABAPerを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。

スポンサーリンク

APPEND命令

APPENDとは日本語に訳すと「付与する」「くっつける」みたいな意味になります。その言葉の意味通り、APPEND命令では内部テーブルへデータを追加する処理を行います。

注意しておきたいのが、これはあくまでも内部テーブルに対する処理であるということ。標準テーブルとアドオンテーブルに対しては使えない処理なので注意しましょう。

構文ルール

パターン1

* ワークエリアまたは構造体から内部テーブルへの追加:
APPEND <source_workarea_or_structure> TO <internal_table>.
  • <source_workarea_or_structure>
    内部テーブルに追加するデータを保持するワークエリアまたは構造体。
  • <internal_table>
    データを追加する対象の内部テーブル。

パターン2

* 値を直接指定して内部テーブルへの追加
APPEND VALUE <structure_type>( <field1> = <value1> <field2> = <value2> ... ) TO <internal_table>.
  • <structure_type>
    内部テーブルの行タイプ(構造体の型)。
  • <field1>, <field2>, ...
    構造体のフィールド名。
  • <value1>, <value2>, ...
    追加するデータの値。
  • <internal_table>
    データを追加する対象の内部テーブル。

処理の内容:APPEND命令

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

APPEND命令
図1:APPEND命令の処理イメージ

ポイントは、追加されるのは内部テーブルの一番最後の行であるという点です。ここだけは、注意して押さえておきましょう。

似たような処理にINSERT命令があります。こちらも日本語に直すと「挿入」という意味になり、APPEND命令と混乱しがちな部分なのですが、両者には明確な違いが存在します。

APPEND命令では挿入されるのが最後の行であるのに対して、INSERT命令では任意の行に挿入できるということです。INSERT命令のイメージはこんな感じになります。

参考 INSERT命令

APPENDとINSERTの違い
  • APPEND
    ⇒テーブルの1番最後に挿入される
  • INSERT
    ⇒テーブルの任意の行に挿入できる

INSERT命令はレコードを挿入する箇所を特定する処理が行われる分、その処理が行われないAPPEND命令の方がパフォーマンスの観点から優れています(APPEND命令のほうが処理速度が速い)。

そのため、どちらの利用でも良い場合(APPENDでもINSERTでも要件を満たせる場合)は、可能な限りAPPEND命令を利用するようにしましょう。

ここまで見てきたように、APPEND命令の処理はとても簡単です。いくつかサンプルコードを見ていきながら具体的なイメージをつかんでいきましょう。

サンプルコード:APPEND命令

APPEND命令を利用したサンプルコードです。

以下は最も単純な例です。

* 従業員のIDと名前を保持する内部テーブルを定義
TYPES: BEGIN OF TY_EMPLOYEE,
         ID TYPE I,
         NAME TYPE STRING,
       END OF TY_EMPLOYEE.

DATA: IT_EMPLOYEE TYPE TABLE OF TY_EMPLOYEE,
      WA_EMPLOYEE TYPE TY_EMPLOYEE.

* ワークエリアwa_employeeに従業員のIDと名前を設定し
* 内部テーブルit_employeeに追加
WA_EMPLOYEE-ID = 1.
WA_EMPLOYEE-NAME = 'ALICE'.
APPEND WA_EMPLOYEE TO IT_EMPLOYEE.

WA_EMPLOYEE-ID = 2.
WA_EMPLOYEE-NAME = 'BOB'.
APPEND WA_EMPLOYEE TO IT_EMPLOYEE.

* APPEND命令に直接値を指定してレコードを追加する
APPEND VALUE TY_EMPLOYEE( ID = 3 NAME = 'CHARLIE' ) TO IT_EMPLOYEE.

参考 TYPES命令 / DATA命令

APPEND命令の注意点

ABAPのAPPEND命令にはいくつかの注意点があります。以下の表では、APPEND命令の使用時に留意すべき点をまとめます。

ABAPのAPPEND命令を使用する際には、重複の取り扱い、初期化されていないワークエリア、順序の維持、およびデータ型の一致に注意する必要があります。

注意点説明
重複の取り扱いAPPEND命令は重複チェックを行いません。重複を避けるには、事前に検索や条件分岐を使って確認してください。
ワークエリアの初期化APPEND命令を繰り返し使用する前に、ワークエリアを初期化しておくことが重要です。そうしないと、古いデータが再利用されることがあります。
順序の維持APPEND命令を使用すると、レコードが内部テーブルの末尾に追加されます。特定の順序でデータを保持する必要がある場合は、INSERT命令やSORT命令を検討してください。
データ型の一致APPEND命令を使用する際には、内部テーブルとワークエリアのデータ型が一致していることを確認してください。データ型が異なる場合、エラーが発生します。
ハッシュテーブルへの使用APPEND命令はハッシュテーブルには利用できません。ハッシュテーブルにデータを追加する場合は、INSERT命令を使用してください。

特に、最後の注意点「ハッシュテーブル」にはAPPEND命令を利用できないという点に注意が必要です。ハッシュテーブルにレコードを追加する場合は、INSERT命令を利用しましょう。

参考 ハッシュテーブルとは?

以下は、ハッシュテーブルにデータを追加する例です。

TYPES: BEGIN OF TY_EMPLOYEE,
         ID TYPE I,
         NAME TYPE STRING,
       END OF TY_EMPLOYEE.

DATA: IT_EMPLOYEE TYPE HASHED TABLE OF TY_EMPLOYEE WITH UNIQUE KEY ID,
      WA_EMPLOYEE TYPE TY_EMPLOYEE.

WA_EMPLOYEE-ID = 1.
WA_EMPLOYEE-NAME = 'ALICE'.
INSERT WA_EMPLOYEE INTO TABLE IT_EMPLOYEE.

WA_EMPLOYEE-ID = 2.
WA_EMPLOYEE-NAME = 'BOB'.
INSERT WA_EMPLOYEE INTO TABLE IT_EMPLOYEE.

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
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました