APPEND

Variants



1. APPEND [wa TO|INITIAL LINE TO] itab.
2. APPEND LINES OF itab1 [FROM idx1] [TO idx2] TO itab2.
3. APPEND [wa TO] itab SORTED BY f.

Variant 1

APPEND [wa TO|INITIAL LINE TO] itab.

Effect

Appends a new line to the end of the internal table itab .

If you specify wa TO , the new line is taken from the contents of the explicitly specified work area wa .

If you use INITIAL LINE TO , a line filled with the correct value for the type is added.

If the specification before itab is omitted, the new line is taken from the internal tbale itab .

After the APEND , the system field SY-TABIX contains the index of the newly added table entry.

Examples

Generate a list with customer numbers:
TABLES SCUSTOM. DATA: CUSTOMER LIKE SCUSTOM-ID OCCURS 0. APPEND SCUSTOM-ID TO CUSTOMER.

Append a blank line or a line with its initial value to the above list:
APPEND INITIAL LINE TO CUSTOMER

Generate a compressed list with plane data
PARAMETERS: SEATS_LO LIKE SAPLANE-SEATSMAX DEFAULT 30, SEATS_HI LIKE SAPLANE-SEATSMAX DEFAULT 50. DATA: PLANE LIKE SAPLANE OCCURS 0, PLANE_NEEDED LIKE SAPLANE WITH HEADER LINE. LOOP AT PLANE INTO PLANE_NEEDED WHERE SEATSMAX BETWEEN SEATS_LO AND SEATS_HI. APPEND PLANE_NEEDED. ENDLOOP.

Notes

Performance

In contrast to COLLECT , APPEND does not check whether an entry with the same default key exists. Therefore, it is considerably faster than COLLECT . If the COLLECT logic is not needed or lines with an identical default key cannot occur in a particular situation, you should always use APPEND instead of COLLECT .
The runtime required for APPEND increases with the line width of the table and depends on the number of fields. Appending an entry to an internal table with a width of 111 bytes takes about 9 msn (standardized microseconds).
To append an internal table to another internal table, you should use the variant APPEND LINES OF ... which is 3 to 4 times faster than using a LOOP to process the source table and append the entries line-by-line to the target table.

Variant 2

APPEND LINES OF itab1 [FROM idx1] [TO idx2] TO itab2.

Effect

Appends the internal table itab1 or an extract from itab1 to the end of the internal table itab2 .

By specifying FROM idx1 or TO idx2 you can restrict the line area taken from the source table itab1 . If there is no FROM specification, it begins with the first line of itab1 . If there is no TO specification, it ends with the last line of itab1 . This means that the complete table is appended if neither a FROM nor a TO is specified.

After the APPEND , the system field SY-TABIX contains the index of the last table entry appended, i.e. the total number of entries from both tables.

Note

By comparing the values of SY-TABIX before and after the APPEND statement, you can determine how many lines were appended to the table.

Example

Merge two tables with whole numbers:
DATA: ITAB1 TYPE I OCCURS 100, ITAB2 TYPE I OCCURS 100. APPEND 2 TO ITAB1. APPEND 3 TO ITAB1. APPEND 5 TO ITAB1. APPEND 7 TO ITAB1. APPEND 3 TO ITAB2. APPEND INITIAL LINE TO ITAB2. APPEND LINES OF ITAB1 FROM 2 TO 20 TO ITAB2.

The table ITAB2 now contains five lines with the values 3, 0, 3, 5 and 7.

Note

Performance

This variant is 3 to 4 times faster than using a LOOP to process the source table and append the entries line-by-line to the target table.

Variant 3

APPEND [wa TO] itab SORTED BY f.

Effect

Inserts the new entry into table and re-sorts the table by the sub-field f in descending order. This only makes sense if the table was sorted beforehand. When the number of table entries reaches the OCCURS parameter value, the last entry is deleted if the value f of a new entry is greater (particularly suitable for ranked lists). You can only sort by one sub-field.

If you specify wa TO , the new line is taken from the contents of the explicitly specified work area wa . Otherwise, it comes from the header line of the internal table itab .

Example

DATA: BEGIN OF COMPANIES OCCURS 3, NAME(10), SALES TYPE I, END OF COMPANIES. COMPANIES-NAME = 'big'. COMPANIES-SALES = 90. APPEND COMPANIES. COMPANIES-NAME = 'small'. COMPANIES-SALES = 10. APPEND COMPANIES. COMPANIES-NAME = 'too small'. COMPANIES-SALES = 5. APPEND COMPANIES. COMPANIES-NAME = 'middle'. COMPANIES-SALES = 50. APPEND COMPANIES SORTED BY SALES.

The table now has three (-> OCCURS 3 ) entries. The line with the contents 'too small' in the sub-field NAME is deleted from the table because the entry for 'middle' has a greater value in the sub-field SALES . This entry now appears in the second table line (after 'big' and before 'small' ).

Notes

Whenever an internal table is processed with APPEND SORTED BY , it should always be filled in this way.
If you specify APPEND with the parameter SORTED BY , the system always searches the entire table. Therefore, it is sometimes better to create the table with a simple APPEND and then use SORT to sort in descending ot ascending order afterwards.
You can also sort in ascending order by first determining the insert position with READ TABLE itab WITH KEY f = itab-f BINARY SEARCH and then by inserting the new entry into the table (perhaps read SY-SUBRC beforehand) with INSERT itab INDEX SY-TABIX .
However, you should be aware that, in such cases, the table may contain more entries than specified in the OCCURS parameter .
If several lines with an identical value f are added, lines added later are treated as smaller, i.e. they are inserted after existing lines with the same value f .
If you use APPEND ... SORTED BY f with an explicitly specified work area, this must be compatible with the line type of the internal table.
If the sort criterion f is not known until runtime, you can use SORTED BY (name) to specify it dynamically as the contents of the field name . If name is blank at runtime or contains an invalid component name, a runtime error occurs.
Regardless of whether you specify it statically or dynamically, you can restrict the sort criterion f further by defining an offset and/or length.
Related COLLECT itab , INSERT itab , SELECT / FETCH NEXT CURSOR ... INTO/APPENDING TABLE itab , MODIFY itab , WRITE f TO itab INDEX idx , SORT itab , READ TABLE itab , LOOP AT itab , DELETE itab

Index
© SAP AG 1996