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