Ansicht
Dokumentation
ABAPINSERT_ITAB_POSITION - INSERT ITAB POSITION
TXBHW - Original Tax Base Amount in Local Currency TXBHW - Original Tax Base Amount in Local CurrencyDiese Dokumentation steht unter dem Copyright der SAP AG.
INSERT, itab_position
... ${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 )