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

ABAP - INSERT verwenden

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)
Werbung

ABAP - Performance für den SELECT

Kategorie - ABAP

In diesem Artikel schauen wir uns noch ein paar Spezialfälle mit dem SELECT an und beleuchten die Performance dieser Konstrukte. Wir zeigen dir die aktuellen Alternativen dafür und geben kleinere Tipps beim Lesen.

02.04.2021

ABAP - Objekte prüfen (Instanzen)

Kategorie - ABAP

In diesem Artikel zeigen wir dir, wie du Instanzen analysieren und auf diese korrekt reagieren kannst, wenn du diese zum Beispiel bei einer Verarbeitung übergibst und individuell reagieren möchtest.

19.03.2021

ABAP - Schleifen

Kategorie - ABAP

Mit dem modernen ABAP wurden auch neue Schleifen und Möglichkeiten zur Einschränkung von Tabelleninhalten geschaffen. Diese neuen Befehle schauen wir uns in diesem Artikel näher an.

19.02.2021

ABAP - Vergleiche

Kategorie - ABAP

Heute betrachten wir uns das Thema Vergleiche und Vergleichsoperatoren im Hinblick auf die neuen Befehle und die aktuelle Verwendung. Was hat sich bisher alles geändert und was sollte man noch tun.

12.02.2021

ABAP - String Funktionen (Teil 3)

Kategorie - ABAP

In diesem Artikel geht es um weitere neue String Funktionen und einen Ersatz für CONDENSE. Hierbei möchten wir dir noch zeigen, wieso du die neuen Funktionen verwenden solltest.

22.01.2021

Wir verwenden Cookies für unsere Dienste und Funktionen. Mehr Informationen