SAPABAP-内部テーブルの作成
DATAステートメントは、内部テーブルを宣言するために使用されます。プログラムは、テーブルの開始位置と終了位置を通知する必要があります。したがって、BEGIN OFステートメントを使用してから、テーブル名を宣言します。この後、OCCURSの追加が使用され、その後に数字(ここでは0)が続きます。OCCURSはSAPに内部テーブルが作成されていることを通知し、0は最初はレコードが含まれないことを示します。その後、データが入力されると展開されます。
以下は構文です-
DATA: BEGIN OF <internal_tab> Occurs 0,
新しい行にフィールドを作成しましょう。たとえば、LIKEZCUSTOMERS1-nameとして宣言されている「name」を作成します。「dob」という別のフィールド、LIKEZCUSTOMERS1-dobを作成します。最初は、内部テーブルのフィールド名に、他の場所で作成された他のフィールドと同じ名前を付けると便利です。最後に、「END OF <internal_tab>」で内部テーブルの終わりを宣言します。次のコードに示すように-
DATA: BEGIN OF itab01 Occurs 0,
name LIKE ZCUSTOMERS1-name,
dob LIKE ZCUSTOMERS1-dob,
END OF itab01.
ここで、「itab01」は、SAPで一時テーブルを作成するときに一般的に使用される省略形です。OCCURS句は、テーブルのフィールドを宣言することにより、内部テーブルの本体を定義するために使用されます。OCCURS句を使用する場合、必要に応じて数値定数「n」を指定して、追加のデフォルトメモリを決定できます。OCCUR0句で使用されるメモリのデフォルトサイズは8KBです。これで内部テーブルの構造が作成され、コードを記述してレコードを入力できます。
内部テーブルは、ヘッダー行を使用して、または使用せずに作成できます。ヘッダー行を含む内部テーブルを作成するには、内部テーブルの定義で、OCCURS句の前にBEGIN OF句を使用するか、OCCURS句の後にWITH HEADERLINE句を使用します。ヘッダー行のない内部テーブルを作成するには、BEGINOF句のないOCCURS句を使用します。
TYPESステートメントを使用して、ローカルデータ型(現在のプログラムのコンテキストでのみ使用されるデータ型)として内部テーブルを作成することもできます。このステートメントは、TYPEまたはLIKE句を使用して、既存のテーブルを参照します。
ローカルデータ型として内部テーブルを作成するための構文は次のとおりです。
TYPES <internal_tab> TYPE|LIKE <internal_tab_type> OF
<line_type_itab> WITH <key> INITIAL SIZE <size_number>.
ここで、<internal_tab_type>は内部テーブル<internal_tab>のテーブルタイプを指定し、<line_type_itab>は内部テーブルの行のタイプを指定します。TYPESステートメントでは、TYPE句を使用して内部テーブルの行タイプをデータ型として指定し、LIKE句を使用して行タイプをデータオブジェクトとして指定できます。内部テーブルのキーの指定はオプションであり、ユーザがキーを指定しない場合、SAPシステムは任意のキーを使用してテーブルタイプを定義します。
INITIAL SIZE <size_number>は、初期量のメモリを割り当てることにより、内部テーブルオブジェクトを作成します。上記の構文では、INITIALSIZE句はsize_numberテーブル行用のメモリスペースを予約します。内部テーブルオブジェクトが宣言されている場合は常に、テーブルのサイズはテーブルのデータ型に属していません。
Note −内部テーブルに初めてデータを入力するときに消費されるメモリははるかに少なくなります。
例
Step 1− SE38トランザクションコードを実行して、ABAPエディタを開きます。ABAPエディタの第一画面が表示されます。
Step 2 −初期画面で、プログラムの名前を入力し、[ソースコード]ラジオボタンを選択し、[作成]ボタンをクリックして新しいプログラムを作成します。
Step 3−「ABAP:プログラム属性」ダイアログボックスで、「タイトル」フィールドにプログラムの簡単な説明を入力し、「属性」グループボックスの「タイプ」ドロップダウンメニューから「実行可能プログラム」オプションを選択します。[保存]ボタンをクリックします。
Step 4 −ABAPエディタで以下のコードを記述します。
REPORT ZINTERNAL_DEMO.
TYPES: BEGIN OF CustomerLine,
Cust_ID TYPE C,
Cust_Name(20) TYPE C,
END OF CustomerLine.
TYPES mytable TYPE SORTED TABLE OF CustomerLine
WITH UNIQUE KEY Cust_ID.
WRITE:/'The mytable is an Internal Table'.
Step 5 −通常どおり、プログラムを保存、アクティブ化、および実行します。
この例では、mytableは内部テーブルであり、Cust_IDフィールドに一意のキーが定義されています。
上記のコードは次の出力を生成します-
The mytable is an Internal Table.