PR

【ABAP】内部テーブルの宣言:3ステップを1分で解説

ABAP

ABAPの大きな特徴の一つが「内部テーブル」です。

ABAPの内部テーブルは、データベーステーブルとは異なる特殊なデータ構造で、ABAPプログラムの実行中にデータを一時的に格納および操作するために使用されます。

参考 内部テーブルとは?

このページでは内部テーブルの宣言方法を1からわかりやすく初心者向けにサンプルコード付きで解説します。

このページで学べる内容
  • 内部テーブルの宣言方法
    • ステップ1:データ型の定義
    • ステップ2:内部テーブルの宣言
    • ステップ3:ワークエリアの宣言

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

スポンサーリンク

内部テーブルの宣言方法

内部テーブルの宣言方法が少しだけ難しいのは以下の3ステップを踏む必要がある点です。

1回の命令でいきなり内部テーブルを定義することはできない点に注意してそれぞれのステップを確認していきましょう。

内部テーブルの宣言
  • ステップ1:データ型の定義
  • ステップ2:内部テーブルの宣言
  • ステップ3:ワークエリアの宣言

ステップ1:データ型の定義

始めのステップとして必要なのが内部テーブルの行を表す構造の定義です。内部テーブルを宣言するには、この構造定義を参照する形で宣言を行うのが一般的です。

以下に内部テーブル作成用の構造定義のサンプルコードを記載します。この例では、id,name,ageというカラムを持つ ty_employee という構造を定義しています。

* データ型の定義
TYPES: BEGIN OF ty_employee,
         id TYPE i,
         name TYPE string,
         age TYPE i,
       END OF ty_employee.

参考 TYPES命令

構造 vs 内部テーブル

内部テーブルと構造は、どちらもABAPプログラムでデータを一時的に格納および操作するために使用されるデータ構造ですが、主な違いは以下のとおりです。

ABAP,変数,構造,内部テーブル
図1:変数 vs 構造 vs 内部テーブル

内部テーブルは複数の行と列から成り立つメモリ領域。一方で構造(ワークエリア)は単一の行のみから構成されるメモリ領域です。

内部テーブルの各行は、構造を使用して定義されることが一般的です。

さらに詳しく学習しておきたい方は以下の記事をご覧ください。

ステップ2:内部テーブルの宣言

ステップ1で定義した構造(データ型)を使用して内部テーブルを宣言します。

この際、内部テーブルのタイプ(標準テーブル、ソート済みテーブル、ハッシュテーブル)を指定することができます。

参考 内部テーブルの分類と特徴

* 内部テーブルの宣言(標準テーブル)
DATA: it_employee TYPE STANDARD TABLE OF ty_employee.

* ソート済みテーブルの宣言
DATA: it_employee_sorted TYPE SORTED TABLE OF ty_employee WITH UNIQUE KEY id.

* ハッシュテーブルの宣言
DATA: it_employee_hashed TYPE HASHED TABLE OF ty_employee WITH UNIQUE KEY id.

上記のサンプルコードでは標準テーブル(it_employee)、ソートテーブル(it_employee_sorted)、ハッシュテーブル(it_employee_hashed)の3種類の内部テーブルを宣言しています。

構造を定義せずに内部テーブルを宣言するパターン①

あまりおすすめできる方法ではないのですが、ステップ1の構造(データ型)を明示的に定義せずに内部テーブルを宣言するサンプルを以下に記載します。

* 内部テーブルの宣言(標準テーブル)
DATA: it_employee TYPE STANDARD TABLE OF ( id TYPE i, name TYPE string, age TYPE i ).

この例では、内部テーブルit_employeeの宣言時に直接フィールドとデータ型を指定しています。

ただし、この方法ではコードの再利用性と可読性が低くなるため、通常はデータ型を明示的に定義して使用することが推奨されます。

構造を定義せずに内部テーブルを宣言するパターン②

SAPの標準テーブルを参照して内部テーブルを宣言することができます。

これにより、既存のデータベーステーブルの構造を継承し、内部テーブルを定義することができます。以下に、SAP標準テーブル(例:MARA)を参照して内部テーブルを宣言する方法の例を示します。

* 内部テーブルの宣言(標準テーブル)
DATA: it_mara TYPE STANDARD TABLE OF MARA.

この例では、MARA(マテリアルマスタデータテーブル)を参照して、内部テーブルit_maraを宣言しています。

こちらはしばしば利用されるパターンで頭に入れておくと良いでしょう。

SAP標準テーブルを参照して内部テーブルを宣言する場合でも、必要に応じて標準テーブル、ソートテーブル、ハッシュテーブルのいずれかのタイプを指定することができます。ただし、内部テーブルの操作に特定のキーが必要な場合、適切なキーを指定して宣言する必要があるため注意しましょう。

ステップ3:ワークエリアの宣言

最後に内部テーブルに対して操作を行う際に使用されるワークエリアを宣言します。ワークエリアは、内部テーブルの行構造と同じデータ型です。

* ワークエリアの宣言
DATA: wa_employee TYPE ty_employee.

ステップ1~3をまとめて以下に記載します。

* データ型の定義
TYPES: BEGIN OF ty_employee,
         id TYPE i,
         name TYPE string,
         age TYPE i,
       END OF ty_employee.

* 内部テーブルの宣言(標準テーブル)
DATA: it_employee TYPE STANDARD TABLE OF ty_employee.

* ソート済みテーブルの宣言
DATA: it_employee_sorted TYPE SORTED TABLE OF ty_employee WITH UNIQUE KEY id.

* ハッシュテーブルの宣言
DATA: it_employee_hashed TYPE HASHED TABLE OF ty_employee WITH UNIQUE KEY id.

* ワークエリアの宣言
DATA: wa_employee TYPE ty_employee.

内部テーブルを宣言する際にワークエリアを必ずしも一緒に宣言する必要があるわけではありません。ただし、ワークエリアは内部テーブルの操作に便利なため、一般的には両方を宣言します。

ワークエリアは、主に以下のような目的で使用されます。

ワークエリアを同時に宣言する目的
  • 内部テーブルへのデータの挿入や更新
    ワークエリアを使用して、内部テーブルにデータを追加(APPEND)や更新(MODIFY)することができます。
  • 内部テーブルからのデータの読み取り
    READ TABLEを使用して、内部テーブルからデータを読み取り、ワークエリアに格納することができます。これにより、内部テーブルのデータを個別に処理することができます。
  • 内部テーブルのデータの削除
    DELETEを使用して、ワークエリアに一致するデータを内部テーブルから削除することができます。
  • ループ処理
    LOOPを使用して、内部テーブルのすべての行をワークエリアにコピーしながら繰り返し処理を行うことができます。

要するに、ワークエリアを使用することで、内部テーブルのデータを効率的に操作できる(ワークエリアを宣言せずに内部テーブルのデータを操作する方法も存在しますが、その場合、コードが複雑になり可読性が低くなる)ので、内部テーブルを宣言する際には、一般的にはワークエリアも一緒に宣言すると覚えておきましょう。

内部テーブルの宣言方法:まとめ
  • 構造(データ型)定義後に標準テーブル、ソートテーブル、ハッシュテーブルのいずれかのタイプを指定して宣言。
  • 同時にワークエリアも宣言しておくのが一般的。
* データ型の定義
TYPES: BEGIN OF ty_employee,
         id TYPE i,
         name TYPE string,
         age TYPE i,
       END OF ty_employee.

* 内部テーブルの宣言(標準テーブル)
DATA: it_employee TYPE STANDARD TABLE OF ty_employee.

* ソート済みテーブルの宣言
DATA: it_employee_sorted TYPE SORTED TABLE OF ty_employee WITH UNIQUE KEY id.

* ハッシュテーブルの宣言
DATA: it_employee_hashed TYPE HASHED TABLE OF ty_employee WITH UNIQUE KEY id.

* ワークエリアの宣言
DATA: wa_employee TYPE ty_employee.

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