ABAPの大きな特徴の一つが「内部テーブル」です。
ABAPの内部テーブルは、データベーステーブルとは異なる特殊なデータ構造で、ABAPプログラムの実行中にデータを一時的に格納および操作するために使用されます。
参考 内部テーブルとは?
このページでは内部テーブルの宣言方法を1からわかりやすく初心者向けにサンプルコード付きで解説します。
ABAPer/SAPエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。
内部テーブルの宣言方法
内部テーブルの宣言方法が少しだけ難しいのは以下の3ステップを踏む必要がある点です。
1回の命令でいきなり内部テーブルを定義することはできない点に注意してそれぞれのステップを確認していきましょう。
ステップ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命令
内部テーブルと構造は、どちらもABAPプログラムでデータを一時的に格納および操作するために使用されるデータ構造ですが、主な違いは以下のとおりです。
内部テーブルは複数の行と列から成り立つメモリ領域。一方で構造(ワークエリア)は単一の行のみから構成されるメモリ領域です。
内部テーブルの各行は、構造を使用して定義されることが一般的です。
さらに詳しく学習しておきたい方は以下の記事をご覧ください。
ステップ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.
ワークエリアは、主に以下のような目的で使用されます。
要するに、ワークエリアを使用することで、内部テーブルのデータを効率的に操作できる(ワークエリアを宣言せずに内部テーブルのデータを操作する方法も存在しますが、その場合、コードが複雑になり可読性が低くなる)ので、内部テーブルを宣言する際には、一般的にはワークエリアも一緒に宣言すると覚えておきましょう。
SAP/ABAPを1から勉強したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!