!--a11y-->

索引テーブルに行を追加するにはいくつかの方法があります。以下の命令には、すべての内部テーブルに適用される同等の命令はありません。
索引テーブルに単一の行を追加するには、以下の命令を使用します。
APPEND <line> TO <itab>.
<line> は、行データ型と互換性のある作業領域か、INITIAL LINE 式です。<wa> を使用した場合は、内部テーブル<itab> に新しい行が追加され、その行に作業領域の内容が書き込まれます。INITIAL LINE によって、その構造の各項目の正しい初期値が含まれた空白行がアペンドされます。各 APPEND 命令のあと、システム項目 SY-TABIX にはアペンドされた行の索引が格納されています。
標準テーブルや一意でないキーを持つソートテーブルへの行のアペンドは、同じキーを持つ行がすでにテーブル内にあるかどうかに関わらず実行されます。そのため、重複エントリが発生する可能性があります。一意のキーを持つソートテーブルに重複エントリを追加しようとすると、実行時エラーが発生します。同様に、ソートテーブルにアペンドして、そのテーブルのソート順序に違反した場合にも実行時エラーが発生します。
以下の命令を使用して、内部テーブルを索引テーブルにアペンドすることもできます。
APPEND LINES OF <itab1> TO <itab2>.
この命令によって ITAB1 全体が ITAB2 にアペンドされます。ITAB1 には任意のテーブルデータ型を指定できますが、そのテーブルの行データ型は ITAB2 の行データ型に変換できなければなりません。
索引テーブルを別の索引テーブルにアペンドする場合は、以下のようにアペンドする行を指定することができます。
APPEND LINES OF <itab1> [FROM <n1>] [TO <n2>] TO <itab2>.
<n1> と <n2> には、ITAB2 にアペンドするITAB1 の最初の行と最後の行の索引を指定します。
テーブルの行を別のテーブルにアペンドするこの方法では、ループで 1 行ずつアペンドするよりもおよそ3 〜 4 倍処理が速くなります。APPEND 命令のあと、システム項目SY-TABIX にはアペンドされた最後の行の索引が格納されています。ソートテーブルに複数の行をアペンドする場合は、一意のキーが定義されている場合はそれを守り、ソート順序に違反しないでください。違反すると実行時エラーが発生します。
APPEND 命令を使用して、標準テーブルにランク一覧を作成することができます。その場合、空のテーブルを作成してから、以下の命令を使用します。
APPEND <wa> TO <itab> SORTED BY <f>.
内部テーブル <itab> の最後に新しい行は追加されません。代わりに、テーブルが項目 <f> によって降順でソートされます。作業領域<wa> は、内部テーブルの行データ型と互換性がなければなりません。ソートテーブルには SORTED BY オプションを使用することはできません。
この手法を使用すると、内部テーブルには、テーブル宣言の INITIAL SIZE パラメータで指定した数のエントリだけが格納されます。これは、内部テーブルは動的に拡張できるという一般ルールの例外です。追加した行が指定した数を超えると、最後の行が破棄されます。これは、長さが限定されたランク一覧 (" 上位 10" など) を作成する場合に便利です。APPEND 命令を使用して、最大 100 個のエントリを含むランク一覧を生成することができます。これより大きい一覧を処理する場合は、パフォーマンス上の理由からテーブルを通常どおりにソートすることをお奨めします。

DATA: BEGIN OF WA,
COL1 TYPE C,
COL2 TYPE I,
END OF WA.
DATA ITAB LIKE TABLE OF WA.
DO 3
TIMES.
APPEND INITIAL LINE TO ITAB.
WA-COL1 = SY-INDEX.WA-COL2 = SY-INDEX **
2.
APPEND WA TO ITAB.
ENDDO.
LOOP AT ITAB INTO
WA.
WRITE: / WA-COL1, WA-COL2.
ENDLOOP.
出力は以下のようになります。
0
1 1
0
2 4
0
3 9
この例では、DO ループでデータが書き込まれた 2 つの列を持つ内部テーブル ITAB が作成されます。ループが実行されるたびに、初期化された行がアペンドされ、その後テーブル作業領域がループ索引とループ索引の平方根を書き込まれてアペンドされます。

DATA: BEGIN OF LINE1,
COL1(3) TYPE C,
COL2(2) TYPE N,
COL3 TYPE
I,
END OF LINE1,
TAB1 LIKE TABLE OF LINE1.
DATA: BEGIN OF LINE2,
FIELD1(1) TYPE
C,
FIELD2
LIKE TAB1,
END OF LINE2,
TAB2 LIKE TABLE OF LINE2.
LINE1-COL1 =
'abc'.LINE1-COL2 = '12'.LINE1-COL3 = 3.
APPEND LINE1 TO TAB1.
LINE1-COL1 =
'def'.LINE1-COL2 = '34'.LINE1-COL3 = 5.
APPEND LINE1 TO TAB1.
LINE2-FIELD1 =
'A'.LINE2-FIELD2 = TAB1.
APPEND LINE2 TO
TAB2.
REFRESH TAB1.
LINE1-COL1 =
'ghi'.LINE1-COL2 = '56'.LINE1-COL3 = 7.
APPEND LINE1 TO TAB1.
LINE1-COL1 =
'jkl'.LINE1-COL2 = '78'.LINE1-COL3 = 9.
APPEND LINE1 TO TAB1.
LINE2-FIELD1 =
'B'.LINE2-FIELD2 = TAB1.
APPEND LINE2 TO
TAB2.
LOOP AT TAB2 INTO
LINE2.
WRITE: / LINE2-FIELD1.
LOOP AT LINE2-FIELD2 INTO LINE1.
WRITE: / LINE1-COL1, LINE1-COL2, LINE1-COL3.
ENDLOOP.
ENDLOOP.
出力は以下のようになります。
A
abc 12 3
def 34 5
B
ghi 56 7
jkl 78 9
この例では、2 つの内部テーブル、つまり TAB1 と TAB2 が作成されます。LINE2 の 2 番目のコンポーネントは内部テーブル TAB1 のデータ型を持つため、TAB2 のデータ型は他の構造を含んだデータ型です。LINE1 が データを書き込まれて TAB1 にアペンドされます。次に、LINE2 がデータを書き込まれて TAB2 にアペンドされます。REFRESH 命令によって TAB1 が作成されたあと、同じプロシージャが繰り返されます。

DATA: BEGIN OF LINE,
COL1 TYPE C,
COL2 TYPE I,
END OF LINE.
DATA: ITAB LIKE TABLE OF
LINE,
JTAB LIKE ITAB.
DO 3
TIMES.
LINE-COL1 = SY-INDEX.LINE-COL2 = SY-INDEX **
2.
APPEND LINE TO ITAB.
LINE-COL1 = SY-INDEX.LINE-COL2 = SY-INDEX **
3.
APPEND LINE TO JTAB.
ENDDO.
APPEND LINES OF JTAB FROM 2 TO 3 TO ITAB.
LOOP AT ITAB INTO
LINE.
WRITE: / LINE-COL1, LINE-COL2.
ENDLOOP.
出力は以下のようになります。
1 1
2 4
3 9
2 8
3 27
この例では、同じデータ型の 2 つの内部テーブル、ITAB と JTAB が作成されます。DO ループで、ITAB に平方数の一覧が書き込まれ、JTAB に立法数の一覧が書き込まれます。次に、JTAB の最後の 2 行が ITAB にアペンドされます。

DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE I,
COL3 TYPE I,
END OF LINE.
DATA ITAB LIKE TABLE OF LINE INITIAL SIZE 2.
LINE-COL1 = 1. LINE-COL2
= 2. LINE-COL3 = 3.
APPEND LINE TO ITAB SORTED BY COL2.
LINE-COL1 = 4. LINE-COL2
= 5. LINE-COL3 = 6.
APPEND LINE TO ITAB SORTED BY COL2.
LINE-COL1 = 7. LINE-COL2
= 8. LINE-COL3 = 9.
APPEND LINE TO ITAB SORTED BY COL2.
LOOP AT ITAB INTO
LINE.
WRITE: / LINE-COL2.
ENDLOOP.
出力は以下のようになります。
8
5
このプログラムでは、APPEND 命令と SORTED BY オプションを使用して、内部テーブル ITAB に 3 行が挿入されます。アペンドできる行の数は DATA 命令の INITIAL SIZE 2 オプションによって固定されているので、項目 COL2 の値が最も小さい行がテーブルから削除されます。