Duplicate Non-Unique Keys
Non-unique table keys can produce duplicate rows with respect to these keys. This section describes the order of these duplicates when data is inserted into table with non-unique sorted table keys. This order is ignored with respect to non-unique primary keys in standard tables.
Single Record Operations
When individual rows are inserted where the insert position is determined using a table key, that is, in the case of
- the operations
INSERT ... INTO TABLE ...or
- in lazy updates of sorted secondary keys
the order of the duplicates with respect to the table key of the target table is determined in accordance with the insert order of the individual rows. The duplicate row last inserted into the table is sorted before all other duplicates.
For block operations such as an assignment of an internal table to another table or when inserting multiple rows using INSERT LINES OF, the order of duplicates with respect to a sorted key of the target table in the block is taken from the source table. If there are already one or more duplicates in the target table, the source block duplicates are inserted in their original order in front of the first duplicate in the target table.
Some operations have the characteristics of block operations but are executed internally as sequences of single record operations. In this case, the original order of duplicates with respect to a sorted key in the target table is not retained. This is the case for the following operations:
- Filling an internal table using
IMPORTfrom a table previously created with
EXPORTand all operations that are based internally on such an import, such as posting operations.
- Passing and applying internal tables for Remote Function Calls.
- The deserialization of an internal table from a table previously serialized to XML using
The result of the following insertion is
TYPES: BEGIN OF line, col1 TYPE string, col2 TYPE string, END OF line, itab TYPE SORTED TABLE OF line WITH NON-UNIQUE KEY col1. DATA(itab) = VALUE itab( ( col1 = 'b' col2 = 'b' ) ( col1 = 'a' col2 = 'a' ) ). DATA(jtab) = VALUE itab( ( col1 = 'b' col2 = 'x' ) ( col1 = 'b' col2 = 'y' ) ( col1 = 'b' col2 = 'z' ) ). INSERT LINES OF jtab INTO TABLE itab. cl_demo_output=>display( itab ).