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 / 347 / 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

Vergleichbare Themen

4
Antw.
12668
Views
delete from itab mit where Bedingung
von debianfan » 31.07.2019 14:38 • Verfasst in ABAP® für Anfänger
10
Antw.
4618
Views
Delete mit where ohne loop möglich?
von RIG » 03.09.2012 17:32 • Verfasst in ABAP® für Anfänger
6
Antw.
17342
Views
Delete innerhalb eines Loop
von ostpower » 29.10.2009 16:09 • Verfasst in ABAP® für Anfänger
6
Antw.
6020
Views
LOOP AT ITAB und CREATE DATA
von lilly-joe » 23.02.2015 12:15 • Verfasst in ABAP® für Anfänger
4
Antw.
3050
Views
Daten in ITAB lesen für jeden Eintrag ohne Loop
von kpas » 04.08.2006 08:07 • Verfasst in ABAP® Core

Über diesen Beitrag



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

Aktuelle Forenbeiträge

IF mit AND und OR
vor 11 Stunden von Selma.schwarz 7 / 24813
BAPI zur ABSO?
vor 3 Wochen von DeathAndPain 2 / 3210
Materialstammerweiterung: Neuer Reiter
vor 4 Wochen von DeathAndPain gelöst 4 / 4141
Ermittlung der Arbeitstage (Mosid)
vor 4 Wochen von Radinator 11 / 49667

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.