Delete in Loop abglecih 2 ITAb

Getting started ... Alles für einen gelungenen Start.
2 Beiträge • Seite 1 von 1
2 Beiträge Seite 1 von 1

Delete in Loop abglecih 2 ITAb

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
Hallo Experten,
meine Frage, welchen von 2 Methoden sind perfoment bei DEL in Loop Schleife?
1.
SORT itab1 by matnr.
SORT itab2 by matnr.
LOOP AT itab2 ASSIGNING <fs_itab2>.
READ TABLE itab1 INTO gs_itab1
WITH KEY matnr = <fs_itab2>-matnr BINARY SEARCH.
IF sy-subrc NE 0.
DELETE itab2 WHERE matnr = <fs_itab2>-matnr .
ENDIF.
ENDLOOP.

oder
2.
SORT itab1 by matnr.
SORT itab2 by matnr.
LOOP AT itab2 ASSIGNING <fs_itab2>.
READ TABLE itab1 INTO gs_itab1
WITH KEY matnr = <fs_itab2>-matnr BINARY SEARCH.

IF sy-subrc NE 0.
<fs_itab2>-del = 'DEL'.
ENDIF.
ENDLOOP.
DELETE itab2 WHERE del = 'DEL'.

danke

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Delete in Loop abglecih 2 ITAb

Beitrag von jocoder (Specialist / 348 / 3 / 103 ) »
Wenn beides Standardtabellen sind, müsste die zweite Variante theoretisch ein wenig performanter sein. In der ersten Variante muss der ABAP-Interpreter für jede zu löschende Zeile die gesamte Tabelle durchsuchen.
In der zweiten Variante muss itab2 nur einmal durchsucht werden, um die Zeilen zu löschen.
Bei itab2 spielt die Sortierung keine Rolle. Daher ist das Statement "SORT itab2 BY matnr" überflüssig.
Für itab1 würde eine sortierte Tabelle Sinn ergeben:

Code: Alles auswählen.

DATA: itab2 TYPE SORTED TABLE structure_whatever WITH NON-UNIQUE KEY matnr.
Spart zwar keine Performance, aber die Statements "SORT" und "BINARY SEARCH".
Bei itab2 kann man sich jetzt streiten, ob ein ABAP-boolscher Wert besser ist oder eigener Datentyp. Ich bevorzuge bei Feldern, die ein Ja oder Nein enthalten, boolsche Werte:

Code: Alles auswählen.

DATA: itab2 TYPE SORTED TABLE structure_whatever WITH NON-UNIQUE KEY matnr.

LOOP AT itab2 ASSIGNING <fs_itab2>.
READ TABLE itab1 INTO gs_itab1
WITH TABLE KEY matnr = <fs_itab2>-matnr.

IF sy-subrc NE 0.
<fs_itab2>-del = abap_true.
ENDIF.
ENDLOOP.
DELETE itab2 WHERE del = abap_true.

Folgende Benutzer bedankten sich beim Autor jocoder für den Beitrag:
autohandel7

ABAP, Java, JavaScript
GitHub

Seite 1 von 1

Über diesen Beitrag



Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Feldroutine ADSO Transformation
vor einer Woche von codemaster1 2 / 89067
Stücklisten
vor 2 Wochen von Selma.schwarz 1 / 90811

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Vergleichbare Themen

delete from itab mit where Bedingung
von debianfan » 31.07.2019 14:38
Delete mit where ohne loop möglich?
von RIG » 03.09.2012 17:32
Delete innerhalb eines Loop
von ostpower » 29.10.2009 16:09
LOOP AT ITAB und CREATE DATA
von lilly-joe » 23.02.2015 12:15

Aktuelle Forenbeiträge

Feldroutine ADSO Transformation
vor einer Woche von codemaster1 2 / 89067
Stücklisten
vor 2 Wochen von Selma.schwarz 1 / 90811

Unbeantwortete Forenbeiträge

Stücklisten
vor 2 Wochen von Selma.schwarz 1 / 90811
Belege
vor 2 Wochen von Selma.schwarz 1 / 88360