Tabellenzeilen einfügen 

Es können eine oder mehrere Zeilen in interne Tabellen eingefügt werden:

Einzelne Zeilen einfügen

Um eine Tabellenzeile in eine beliebige Tabelle einzufügen verwendet man die Anweisung:

INSERT <line> INTO TABLE <itab>.

Dabei ist <line> entweder ein zum Zeilentyp kompatibler Arbeitsbereich oder der Ausdruck INITIAL LINE. Die Forderung der Kompatibilität des Arbeitsbereichs ergibt sich daraus, daß die Felder des Tabellenschlüssels typgerecht versorgt werden müssen. Mit INITIAL LINE wird eine typgerecht initialisierte Leerzeile eingefügt.

Falls die interne Tabelle einen eindeutigen Schlüssel hat, werden Zeilen, deren Schlüssel in der Tabelle schon vorhanden ist, nicht eingefügt und SY-SUBRC wird auf 4 gesetzt. Bei erfolgreichem Einfügen ist SY-SUBRC gleich 0.

Das Einfügen erfolgt für die einzelnen Tabellenarten wie folgt:

Die Zeile wird als letzte Zeile an die interne Tabelle angehängt. Die Anweisung arbeitet wie die spezifische Anweisung APPEND zum Zeilen anhängen.

Die Zeile wird gemäß Tabellenschlüssel in die Tabelle einsortiert. Bei nicht eindeutigem Schlüssel wird an der obersten Stelle von eventuell vorhandenen Duplikaten eingefügt. Die Laufzeit hängt logarithmisch von der Anzahl bereits vorhandener Tabelleneinträge ab.

Die Zeile wird gemäß Tabellenschlüssel in die interne Hash-Verwaltung der Tabelle eingefügt.

Mehrere Zeilen einfügen

Um mehrere Tabellenzeilen auf einmal in eine beliebige Tabelle einzufügen verwendet man die Anweisung:

INSERT LINES OF <itab1> [FROM <n1>] [TO <n 2>] INTO TABLE <itab2>.

Dabei sind <itab1> und <itab2> Tabellen mit kompatiblem Zeilentyp. Es werden die Zeilen der Tabelle <itab1> nach den gleichen Regeln wie beim Einfügen einer einzelnen Zeile hintereinander in die Tabelle <itab2> eingefügt.

Falls <itab1> eine Index-Tabelle ist, können über <n 1 > und <n 2 > die Indexe der ersten bzw. letzten anzuhängenden Zeile von ITAB1 angegeben werden.

Die Methode, Zeilen einer Tabelle in eine andere einzufügen kann je nach Größe der Tabellen und an welcher Stelle eingefügt wird um bis zu einen Faktor 20 schneller sein, als in einer Schleife zeilenweise einzufügen.

Beispiele

Einzelne Zeilen einfügen.

REPORT demo_int_tables_insert .

DATA: BEGIN OF line,
        land(3)  TYPE c,
        name(10) TYPE c,
        age      TYPE i,
        weight   TYPE p DECIMALS 2,
      END OF line.

DATA itab LIKE SORTED TABLE OF line
          WITH NON-UNIQUE KEY land name age weight.

line-land = 'G'.   line-name   = 'Hans'.
line-age  = 20.    line-weight = '80.00'.
INSERT line INTO TABLE itab.

line-land = 'USA'. line-name   = 'Nancy'.
line-age  = 35.    line-weight = '45.00'.
INSERT line INTO TABLE itab.

line-land = 'USA'. line-name   = 'Howard'.
line-age  = 40.    line-weight = '95.00'.
INSERT line INTO TABLE itab.

line-land = 'GB'.  line-name   = 'Jenny'.
line-age  = 18.    line-weight = '50.00'.
INSERT line INTO TABLE itab.

line-land = 'F'.   line-name   = 'Michele'.
line-age  = 30.    line-weight = '60.00'.
INSERT line INTO TABLE itab.

line-land = 'G'.   line-name   = 'Karl'.
line-age  = 60.    line-weight = '75.00'.
INSERT line INTO TABLE itab.

LOOP AT itab INTO line.
  WRITE: / line-land, line-name, line-age, line-weight.
ENDLOOP.

Die Listenausgabe ist: :

F Michele 30 60,00
G Hans 20 80,00
G Karl 60 75,00
GB Jenny 18 50,00
USA Howard 40 95,00
USA Nancy 35 45,00

In eine sortierte interne Tabelle werden einzelne Zeieln eingefügt.

Mehrere Zeilen einfügen

REPORT demo_int_tables_insert_lines .

DATA: BEGIN OF line,
        col1 TYPE i,
        col2 TYPE i,
      END OF line.

DATA: itab LIKE STANDARD TABLE OF line,
      jtab LIKE SORTED TABLE OF line
           WITH NON-UNIQUE KEY col1 col2.

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.

INSERT LINES OF itab INTO TABLE jtab.

LOOP AT jtab INTO line.
  WRITE: / sy-tabix, line-col1, line-col2.
ENDLOOP.

Die Listenausgabe ist: :

         1         1          1
         2         1          1
         3         2          4
         4         2          8
         5         3          9
         6         3         27

Es werden zwei interne Tabellen vom gleichen Zeilentyp aber unterschiedlicher Tabellenart angelegt und jeweils mit drei Zeilen gefüllt. Danach wird die gesamte Tabelle ITAB in die sortierte Tabelle JTAB einsortiert.