ABAPINSERT_ITAB_POSITION - INSERT ITAB POSITION

Addresses (Business Address Services)   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.

INSERT - itab_position

Kurzreferenz



Syntax

... {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ügtwerden sollen. Bei der Variante mit dem Zusatz TABLE wird die Stelle, an der eine Zeile eingefügtwird, über den primären Tabellenschlüssel spezifiziert, bei den anderen Varianten über eine Zeilennummer des primären Tabellenindex. Letztere sind nur fürIndextabellen möglich.

Hinweis

Die Einfügeposition wird ausschließlich über denprimären Tabellenschlüssel bzw.primären Tabellenindex bestimmt. Für diesekundärenTabellenschlü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üsselserfolgt bei eindeutigen Sekundärschlüsseln vor dem nächsten Zugriff auf die Tabelleund 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üssenkompatibelzum Zeilentyp der internen Tabelle sein. Jede einzelne der einzufügenden Zeilen wird je nach Tabellenart wie folgt eingefügt:

  • Bei Standardtabellenwird jede neue Zeile unabhängig vom primären Tabellenschlüssel als letzte Zeile an die interne Tabelle angehängt.

  • Bei sortiertenTabellen wird jede neue Zeile gemäß ihren Schlüsselwerten bezüglichdes Primärschlüssels in die Sortierreihenfolge der internen Tabelle eingefügt unddie Zeilennummern im primären Tabellenindex der folgenden Zeilen um 1 erhöht. Falls dieinterne Tabelle einen nicht-eindeutigen Schlüssel hat, werden doppelte Einträge vor der vorhandenen Zeile eingefügt.

  • Bei Hash-Tabellenwird 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ägeeingefügt, die in einem der eindeutigen Tabellenschlüssel zu doppelten Einträgenfü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 eszu 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 derStandardschlüsselsein kann, der bei strukturiertem Zeilentyp alle zeichen- und byteartigen Komponenten umfasst. Einenleeren 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ügtund mit dem Inhalt des Arbeitsbereichs connection gefüllt. Da die interne Tabelle eineneindeutigen Primärschlüssel hat, werden doppelte Einträge verworfen. Die performantereSELECT-Anweisung,bei der die interne Tabelle direkt hinter INTOTABLE angegeben ist, könnte wegen der Eindeutigkeit des primären Tabellenschlüssels zu einer Ausnahme führen.

DATA: BEGIN OF connection,
        cityfrom TYPE spfli-cityfrom,
        cityto   TYPE spfli-cityto,
        distid   TYPE spfli-distid,
        distance TYPE spfli-distance,
      END OF connection.

DATA connection_tab LIKE SORTED TABLE OF connection
                   WITH UNIQUE KEY cityfrom cityto
                                   distid distance.

SELECT cityfrom cityto distid distance
       FROM spfli
       INTO connection.
  INSERT connection INTO TABLE connection_tab.
ENDSELECT.

Alternative 2

... itab INDEX idx


Wirkung

Diese Variante ist nur für Standardtabellen undsortierteTabellen 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 einenumerische Ausdrucksposition vom Operandentyp i.

Falls idx einen Wert enthält, welcher der Anzahl der vorhandenen Tabellenzeilen zuzüglich1 entspricht, wird die neue Zeile als letzte Zeile an die interne Tabelle angehängt. Falls idxeinen 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ärenTabellenschlüssel führt, kommt es zu einer behandelbaren Ausnahme der Klasse CX_SY_ITAB_DUPLICATE_KEY.

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


TXBHW - Original Tax Base Amount in Local Currency   Addresses (Business Address Services)  
Diese Dokumentation steht unter dem Copyright der SAP AG.


Length: 11212 Date: 20120526 Time: 213340     triton ( 384 ms )