Ansicht
Dokumentation

ABAPINSERT_ITAB_POSITION - INSERT ITAB POSITION

ABAPINSERT_ITAB_POSITION - INSERT ITAB POSITION

TXBHW - Original Tax Base Amount in Local Currency   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

INSERT, itab_position

Kurzreferenz



... ${TABLE itab$}
  $| ${itab INDEX idx$}
  $| ${itab$} ...

Alternativen:

1. ... TABLE itab

2. ... itab INDEX idx

3. ... itab

Wirkung

Diese Alternativen spezifizieren, an welcher Stelle der internen Tabelle itab Zeilen eingefügt werden sollen. Bei der Variante mit dem Zusatz TABLE wird die Zeile über den primären Tabellenschlüssel spezifiziert. In allen anderen Varianten wird eine Zeilennummer aus dem primären Tabellenindex verwendet. Letzteres ist nur für Indextabellen möglich.

Hinweis

Die Einfügeposition wird ausschließlich über den primären Tabellenschlüssel bzw. primären Tabellenindex bestimmt. Für die sekundären Tabellenschlüssel der internen Tabelle wird dabei die Aufrechterhaltung der Eindeutigkeit überprüft und die neue Tabellenzeile in die entsprechende Verwaltung (Hash-Verwaltung, sekundärer Tabellenindex) aufgenommen. Die Aktualisierung der Verwaltung des Sekundärschlüssels erfolgt bei eindeutigen Sekundärschlüsseln vor dem nächsten Zugriff auf die Tabelle und bei nicht-eindeutigen Sekundärschlüsseln vor der nächsten Verwendung des Sekundärschlüssels.

Alternative 1

... TABLE itab


Wirkung

Die einzufügenden Zeilen line_spec müssen kompatibel zum Zeilentyp der internen Tabelle sein. Jede einzelne der einzufügenden Zeilen wird je nach Tabellenart wie folgt eingefügt:

  • Bei Standardtabellen wird jede neue Zeile unabhängig vom primären Tabellenschlüssel als letzte Zeile an die interne Tabelle angehängt.
  • Bei sortierten Tabellen wird jede neue Zeile gemäß ihren Schlüsselwerten bezüglich des Primärschlüssels in die Sortierreihenfolge der internen Tabelle eingefügt und die Zeilennummern im primären Tabellenindex der folgenden Zeilen um 1 erhöht. Falls die interne Tabelle einen nicht-eindeutigen Schlüssel hat, werden doppelte Einträge vor der vorhandenen Zeile eingefügt.
  • Bei Hash-Tabellen wird jede neue Zeile gemäß ihren Schlüsselwerten bezüglich des Primärschlüssels von der Hash-Verwaltung in die interne Tabelle eingefügt.

Falls die interne Tabelle einen oder mehrere eindeutige Tabellenschlüssel hat, werden keine Einträge eingefügt, die in einem der eindeutigen Tabellenschlüssel zu doppelten Einträgen führen würden. Beim Einfügen einzelner Zeilen wird sy-subrc auf 4 gesetzt, wenn es zu einem doppelten Eintrag bezüglich des Primärschlüssels käme, und es wird eine behandelbare Ausnahme der Klasse CX_SY_ITAB_DUPLICATE_KEY ausgelöst, wenn es zu einem doppelten Eintrag bezüglich eines Sekundärschlüssels käme. Beim Einfügen mehrerer Zeilen kommt es zu einer unbehandelbaren Ausnahme.

Hinweis

Bei Verwendung des primären Tabellenschlüssels ist zu beachten, dass dies auch der Standardschlüssel sein kann, der bei strukturiertem Zeilentyp alle zeichen- und byteartigen Komponenten umfasst. Einen leeren Standardschlüssel kann es nur bei Standardtabellen geben, für die INSERT in dieser Variante ohnehin immer wie APPEND wirkt.

Beispiel

Füllen einer internen Tabelle connection_tab mit den Daten aus der Datenbanktabelle spfli. Es werden einzelne Zeilen über den primären Tabellenschlüssel eingefügt und mit dem Inhalt des Arbeitsbereichs connection gefüllt. Da die interne Tabelle einen eindeutigen Primärschlüssel hat, werden doppelte Einträge verworfen. Die performantere SELECT-Anweisung, bei der die interne Tabelle direkt hinter INTO TABLE angegeben ist, könnte wegen der Eindeutigkeit des primären Tabellenschlüssels zu einer Ausnahme führen.

Alternative 2

... itab INDEX idx


Wirkung

Diese Variante ist nur für Standardtabellen und sortierte Tabellen möglich. Jede einzelne der einzufügenden Zeilen line_spec wird vor der Zeile mit der Zeilennummer idx im primären Tabellenindex eingefügt und die Zeilennummern im primären Tabellenindex der folgenden Zeilen um 1 erhöht. idx ist eine numerische Ausdrucksposition vom Operandentyp i.

Falls idx einen Wert enthält, welcher der Anzahl der vorhandenen Tabellenzeilen zuzüglich 1 entspricht, wird die neue Zeile als letzte Zeile an die interne Tabelle angehängt. Falls idx einen größeren Wert enthält, wird keine Zeile eingefügt und sy-subrc auf 4 gesetzt.

In folgenden Fällen kommt es zu einer unbehandelbaren Ausnahme:

  • wenn idx einen Wert kleiner gleich 0 enthält.
  • wenn eine einzufügende Einzelzeile zu einem doppelten Eintrag in einem eindeutigen primären oder sekundären Tabellenschlüssel führen würde.
  • wenn ein Block einzufügender Zeilen zu einem doppelten Eintrag in einem eindeutigen primären Tabellenschlüssel führen würde.
  • wenn eine einzufügende Zeile die Sortierreihenfolge bei sortierten Tabellen zerstören würde.
Die Änderung der Sortierreihenfolge bezüglich eines sortierten Sekundärschlüssels führt dagegen nie zu einer Ausnahme, sondern der zugehörige Sekundärindex wird entweder direkt (direct update) oder verzögert (lazy update) aktualisiert.

Wenn eine einzufügende Einzelzeile zu einem doppelten Eintrag in einem eindeutigen sekundären Tabellenschlüssel führt, kommt es zu einer behandelbaren Ausnahme der Klasse CX_SY_ITAB_DUPLICATE_KEY.

Beispiel

Einfügen einer Zeile hinter eine zuvor gesuchte Zeile.

Alternative 3

... itab


Wirkung

Diese Variante ist nur innerhalb einer LOOP-Schleife über die gleiche interne Tabelle möglich und wenn bei LOOP der Zusatz USING KEY nicht angegeben ist. Jede einzufügende Zeile wird vor der aktuellen Tabellenzeile der LOOP-Schleife eingefügt.

Wenn die aktuelle Zeile im gleichen Schleifendurchgang gelöscht wurde, ist das Verhalten undefiniert.

Hinweis

Die Verwendung dieser Alternative wird nicht empfohlen. Statt dessen sollte die Zeilennummer explizit mit dem Zusatz INDEX angegeben werden.

Beispiel

Bedingtes Einfügen einer Zeile vor jede Zeile in einer internen Tabelle.






rdisp/max_wprun_time - Maximum work process run time   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 10073 Date: 20240328 Time: 190003     sap01-206 ( 87 ms )