This is a test message to test the length of the message box.
Login
ABAP INSERT verwenden
Erstellt von Software-Heroes

ABAP - INSERT verwenden

2190

APPEND hat in ABAP bereits eine lange Geschichte, doch dieser wird in Zukunft immer weniger eine Rolle spielen. Wir zeigen dir wieso.

Werbung


Mit Clean ABAP und den neuen Statements, hat sich die Sprache ABAP die letzten Jahre stark weiterentwickelt, sodass mittlerweile viele Statements an Bedeutung verloren haben oder obsolet geworden sind. Im heutigen Artikel schauen wir uns INSERT etwas genauer an und wieso wir eigentlich den APPEND nicht mehr benötigen und diesen so langsam vergessen können.

 

APPEND

Der Append hängt eine Zeile an eine Tabelle, so wie der Name es vermuten lässt. Dies funktioniert aber nur für den Typ Standard-Tabelle und nicht für sortierte Tabellen (Sorted und Hash). Damit ist der Funktionsumfang des Statements stark eingeschränkt und führt im schlimmsten Fall zu einem Abbruch deiner Anwendung, wenn sich einmal der Typ der Tabelle ändern sollte.

Zur Folge hat dieses ABAP Statements einen stark eingeschränkten Verwendungsrahmen und kann zu Fehlern beim Aufruf führen. Da heutzutage der Performance wegen öfter Tabellen mit Sortierung und Schlüsseln verwendet werden, rückt dieser Befehl weiter in den Hintergrund.

 

INSERT

Der Insert Befehl kann in alle Arten von Tabellen eine Zeile korrekt einfügen und verhält sich entsprechend der Art der Tabelle. In sortierte Tabellen (Sorted, Hash) wird der Datensatz an der richtigen Stelle, entsprechend dem Schlüssel, eingefügt. Bei Standard-Tabellen wird der Datensatz am Ende angehangen. Damit umgehst du Probleme, wenn sich der Typ der Tabelle einmal ändern sollte. Solche Stellen fallen nicht immer bei einem Refactoring des Quellcodes auf und können schnell zu Abstürzen führen, die du hättest von Anfang an vermeiden können.

Im folgenden ein Beispiel zur Gegenüberstellung der beiden Befehle, einmal unter Verwendung einer Struktur und zum Zweiten über den neuen VALUE Befehl. Beide Befehle verhalten sich gleich, doch werden unterschiedlich ausgeschrieben.

DATA:
  ls_tool TYPE zbs_dy_tools,
  lt_tool TYPE STANDARD TABLE OF zbs_dy_tools WITH EMPTY KEY.

ls_tool-short_name = 'WRENCH'.
ls_tool-stock_quantity = 10.

APPEND ls_tool TO lt_tool.
INSERT ls_tool INTO TABLE lt_tool.

APPEND VALUE #( short_name = 'WRENCH' stock_quantity = 10 ) TO lt_tool.
INSERT VALUE #( short_name = 'WRENCH' stock_quantity = 10 ) INTO TABLE lt_tool.

 

Sortierte Tabelle

Wie verhält sich das Ganze bei sortierten Tabellen? Mit Append kannst du hier nicht mehr arbeiten, zumindest solange bis du einen Datensatz anhängst, der gegen die Sortierung verstößt. Diese Eigenschaft stellt ein hohes Risiko dar, da dieser Fehler vielleicht während des Tests nicht bemerkt wird.

Hier ein Beispiel zum Handling mit sortierten Tabellen:

DATA:
  ls_tool TYPE zbs_dy_tools,
  lt_tool TYPE SORTED TABLE OF zbs_dy_tools WITH UNIQUE KEY short_name.

ls_tool-short_name = 'WRENCH'.
ls_tool-stock_quantity = 10.
INSERT ls_tool INTO TABLE lt_tool.

INSERT VALUE #( short_name = 'WRENCH' stock_quantity = 10 ) INTO TABLE lt_tool.

 

Einige Entwickler fügen auch gern einmal einen leeren Datensatz in eine Tabelle ein und arbeiten dann mit dem Feldsymbol oder der Referenz weiter. Bei sortierten Tabellen muss aber zumindest der Schlüssel befüllt werden, damit das Verhalten funktioniert. Merh dazu findest du im Artikel "Arbeiten mit Referenzen". Ein kurzes Beispiel zu diesem Verhalten:

DATA:
  lt_tool TYPE SORTED TABLE OF zbs_dy_tools WITH UNIQUE KEY short_name.

INSERT VALUE #( short_name = 'WRENCH' ) INTO TABLE lt_tool ASSIGNING FIELD-SYMBOL(<ls_tool>).
<ls_tool>-stock_quantity = 12.

INSERT VALUE #( short_name = 'HAMMER' ) INTO TABLE lt_tool REFERENCE INTO DATA(lr_tool).
lr_tool->stock_quantity = 15.

 

LINE_INDEX

Du hast eine Reihe von Datensätzen in eine Tabelle eingefügt und möchtest zu einem bestimmten Schlüssel den TABIX wissen? Dafür gibt es in ABAP den Befehl LINE_INDEX, dieser sucht nach dem Schlüssel und gibt die entsprechende Zeilennummer  zurück. Wenn der Schlüssel nicht gefunden wird, wir der Wert 0 (Null) zurückgegeben. Dazu ein kleines Beispiel:

DATA:
  lt_tool TYPE SORTED TABLE OF zbs_dy_tools WITH UNIQUE KEY short_name.

INSERT VALUE #( short_name = 'WRENCH' stock_quantity = 10 ) INTO TABLE lt_tool.
INSERT VALUE #( short_name = 'SCREW' stock_quantity = 10 ) INTO TABLE lt_tool.
INSERT VALUE #( short_name = 'HAMMER' stock_quantity = 10 ) INTO TABLE lt_tool.

DATA(ld_tabix) = line_index( lt_tool[ short_name = 'HAMMER' ] ).

 

Der Wert von der Variable ld_tabix wird entsprechend 1 sein, da der Datensatz an die erste Stelle in der Tabelle eingefügt wurde (der Sortierung folgend).

 

Fazit

Den ABAP Befehl Append solltest du langsam aus deinem Gedächtnis streichen und voll auf Insert setzen, um in Zukunft weniger Probleme zu haben. Die Nutzung ist genau so leicht wie Append und erspart dir etwas Ärger in Zukunft.

 

Quelle:
ABAP Dokumentation - LINE_INDEX


Enthaltene Themen:
Modernes ABAPINSERTAPPENDObsoletLINE_INDEX
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


ABAP - Type Casting

Kategorie - ABAP

Wie kommst du eigentlich an den ursprünglichen Typ einer Klasse bzw. Instanz, wenn diese in einer generischen Tabelle übergeben wird? In diesem Artikel prüfen wir die Möglichkeiten.

16.04.2024

ABAP - RETURN value

Kategorie - ABAP

Nach all den Jahren ist nun endlich der "echte" Return in ABAP angekommen, in diesem Artikel zeigen wir dir, wie der funktioniert und was er kann.

13.02.2024

ABAP Deep Dive - FOR (Schleifen)

Kategorie - ABAP

Schauen wir uns einmal die FOR Schleife etwas näher an. Wie funktioniert sie? Was muss ich beachten und was kann ich damit tun?

14.04.2023

ABAP Deep Dive - Tabellenzugriff (intern)

Kategorie - ABAP

Schauen wir uns in diesem Artikel einmal den Tabellenzugriff auf interne Tabellen an und wie sie den READ TABLE ablösen.

03.02.2023

ABAP - FINAL

Kategorie - ABAP

In diesem Artikel schauen wir uns einmal das neue FINAL Sprachkonstrukt an, wie es funktioniert und was du damit anstellen kannst.

23.12.2022