Skip to content

ABAP Keyword Documentation →  ABAP − Reference →  Processing Internal Data →  Internal Tables →  Internal Tables - Overview →  Table Keys 

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.

Other versions: 7.31 | 7.40 | 7.54

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 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.

Block Operations

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.

Special Features

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 IMPORT from a table previously created with EXPORT and all operations that are based internally on such an import, such as posting operations.
  • The deserialization of an internal table from a table previously serialized to XML using CALL TRANSFORMATION.



The result of the following insertion is

a a
b z
b y
b x
b b
  BEGIN OF line, 
    col1 TYPE string, 
    col2 TYPE string, 
  END 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' ) ). 


cl_demo_output=>display( itab ).