Delete mit where ohne loop möglich?

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

Delete mit where ohne loop möglich?

Beitrag von RIG (Specialist / 110 / 30 / 1 ) »
Hallo an alle,

ich frage mich ob ich diesen Loop irgendwie auch in eine einzeilig anweisung Delete... where ... bekomme.

LOOP AT gt_sched_bookrent ASSIGNING <gs_sched_bookrent>.

If <gs_sched_bookrent>-kennzeichen <> ''.
DELETE gt_cars_bookrent WHERE kennzeichen = <gs_sched_bookrent>-kennzeichen.
endif.

ENDLOOP.


beide Tabellen haben aber keine Kopfzeile weshalb das so nicht gehen mag:

DELETE gt_cars_bookrent WHERE kennzeichen = gt_sched_bookrent-kennzeichen.

und das auch nicht:

DELETE gt_cars_bookrent WHERE kennzeichen = gt_sched_bookrent~kennzeichen.

Der Loop geht und es ist nicht dringend, aber da ich noch am lernen bin interessieren mich natürlich alle alternativen (außer Tables-Anweisungen). wer also Zeit und eine Antwort parat hat immer gerne her damit. VG Rig

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


Re: Delete mit where ohne loop möglich?

Beitrag von c oco (Specialist / 326 / 12 / 16 ) »
Hallo,

also grundsätzlich:
du kannst delete it_tab where kennezeichen <> 'XY' machen.

Wenn du grundsätzlich die Inhalte aus der itab mit XY nicht haben willst und das
Kennzeichen statisch also nicht dynamisch bestimmt ist, dann könntest du
in diesem Falle auf ein Loop verzichten!
Gruß
coco

Folgende Benutzer bedankten sich beim Autor c oco für den Beitrag:
RIG


Re: Delete mit where ohne loop möglich?

Beitrag von RIG (Specialist / 110 / 30 / 1 ) »
Statisch dynamisch..

Also wenn Du damit meinst ob in gt_sched_bookrent-kennzeichen nur ein Kennzeichen vorkommt und ich den als Statischen wert nehmen könnte kann ich auf den Loop leider nicht verzichten, da in der Tabelle mehrer Kennzeichen drin sind.

Ich möchte ja auch die Zeilen löschen welche in gt_sched_bookrent-Kennzeichen = gt_cars_bookrent-Kennzeichen sind.

Wenn ich das Statisch und dynamisch von Dir richtig interpretiere geht es also in meinem Falle nicht ohne Loop?

Mfg RIG

Re: Delete mit where ohne loop möglich?

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
RIG hat geschrieben:Hallo an alle,
ich frage mich ob ich diesen Loop irgendwie auch in eine einzeilig anweisung Delete... where ... bekomme.
Nein. Das geht nicht.

Allerdings ist die Frage schlecht formuliert. Eventuell könnte nämlich "Nein!" die korrekte Antwort sein obwohl es theoretisch möglich wäre.Bild

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
RIG

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Delete mit where ohne loop möglich?

Beitrag von a-dead-trousers (Top Expert / 4414 / 224 / 1186 ) »
hi!

"Kürzer" als das ursprüngliche Coding wird es nicht gehen, aber es gibt eine Menge Möglichkeiten, wie man die Anweisung performanter machen.
Nur wird sie dadurch auch um einiges komplizierter/länger.

Besteht Interesse?

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Delete mit where ohne loop möglich?

Beitrag von RIG (Specialist / 110 / 30 / 1 ) »
immer....
wie gesagt ich lerne noch - also immer her mit dem coding. :-)

Habe auch schon ein Programm für mich geschrieben was 2 oder 3 Code beispiele für mich vergleicht um zu sehen welche version die meiste performance hat.
Ganz einfache Sache - Loops mit timestamps :-)

VG RIG

Re: Delete mit where ohne loop möglich?

Beitrag von a-dead-trousers (Top Expert / 4414 / 224 / 1186 ) »
Sag aber dann nicht, ich hätte dich nicht gewarnt!

Code: Alles auswählen.

SORT gt_sched_bookrent BY kennzeichen. "Sortieren damit BINARY SEARCH möglich ist, alternative wäre einen SORTED TABLE zu verwenden
DELETE ADJACENT DUPLICATES FROM gt_sched_bookrent COMPARING kennzeichen. "Duplikate entfernen, evtl. eine zweite Tabelle verwenden, damit man die anderen Datensätze nicht verliert
DELETE gt_sched_bookrent WHERE kennzeichen IS INITIAL. "Die werden ja sowieso ausgeschlossen

SORT gt_cars_bookrent BY kennzeichen. "Sortiert, damit eine Gruppenstufenverarbeitung möglich ist
CLEAR ld_kennzeichen. "Hilfsvariable für Gruppenstufenverarbeitung initialisieren

LOOP AT gt_cars_bookrent ASSIGNING <gs_cars_bookrent> WHERE kennzeichen IS NOT INITIAL.
  IF ld_kennzeichen NE <gs_cars_bookrent>-kennzeichen. "Gruppenstufenverarbeitung. Würde auch mit AT NEW funktionieren ist aber so flexibler
    UNASSIGN <gs_sched_bookrent>. "Der Umstand 'nichts gefunden' wird durch ein unverknüpftes Feldsymbol ausgedrückt (erspart Zusatzvariable)
    READ TABLE gt_sched_bookrent ASSIGNING <gs_sched_bookrent> BINARY SEARCH "Binary Search für den schnellsten Zugriff
      WITH KEY kennzeichen = <gs_cars_bookrent>-kennzeichen. 
    ld_kennzeichen = <gs_cars_bookrent>-kennzeichen. "Hilfsvariable für Gruppenstufenverarbeitung befüllen
  ENDIF.
  IF <gs_sched_bookrent> IS ASSIGNED. "Wurde was gefunden, dann die aktuelle Zeile löschen
    DELETE gt_cars_bookrent.
  ENDIF.
ENDLOOP.
Das Ganze macht natürlich nur bei großen Datenmengen Sinn

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Delete mit where ohne loop möglich?

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
@adt: Das sieht mir noch nicht ganz richtig aus, denn beim Gruppenwechsel wird die 1. Zeile der neuen Gruppe nie gelöscht, die folgenden hingegen schon.

@RIG: Der Hinweis von adt "nur bei großen Datenmengen" sollte sehr ernsthaft gelesen werden, denn der Geschwindigkeitsvorteil sollte gegen den Lesbarkeitsnachteil abgewogen werden!
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Delete mit where ohne loop möglich?

Beitrag von a-dead-trousers (Top Expert / 4414 / 224 / 1186 ) »
black_adept hat geschrieben:Das sieht mir noch nicht ganz richtig aus, denn beim Gruppenwechsel wird die 1. Zeile der neuen Gruppe nie gelöscht, die folgenden hingegen schon.
Habs mir nochmals durchgeschaut, kann aber den Fehler den du meinst nicht entdecken.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Delete mit where ohne loop möglich?

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
a-dead-trousers hat geschrieben:
black_adept hat geschrieben:Das sieht mir noch nicht ganz richtig aus, denn beim Gruppenwechsel wird die 1. Zeile der neuen Gruppe nie gelöscht, die folgenden hingegen schon.
Habs mir nochmals durchgeschaut, kann aber den Fehler den du meinst nicht entdecken.
Hast recht - mein Fehler - dein Coding ist korrekt. Die ganzen Feldsymbolnamen haben wohl mein Hirn verwirrt.


Ach nee - das hatte ich absichtlich falsch gepostet um den Hinweis @RIG zu verdeutlichen :)
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Delete mit where ohne loop möglich?

Beitrag von a-dead-trousers (Top Expert / 4414 / 224 / 1186 ) »
:) :D :) :D :) :D
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

1
Antw.
482
Views
Delete in Loop abglecih 2 ITAb
von autohandel7 » 17.12.2021 10:35 • Verfasst in ABAP® für Anfänger
6
Antw.
15895
Views
Delete innerhalb eines Loop
von ostpower » 29.10.2009 16:09 • Verfasst in ABAP® für Anfänger
1
Antw.
1672
Views
9
Antw.
11779
Views
DELETE FROM ... NOT IN...
von ChristianHo » 09.02.2016 10:00 • Verfasst in ABAP® für Anfänger
4
Antw.
3892
Views
LOOP in einem LOOP
von Bjuti » 10.09.2013 15:18 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Nach MESSAGE TYPE E Felder entsperren
vor 6 Tagen von rob_abc gelöst 8 / 8485
ABAP - Mail so10 Text
vor einer Woche von retsch 6 / 2389
selection-screen comment mit icon
vor einer Woche von DeathAndPain 9 / 3665

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.

Aktuelle Forenbeiträge

Nach MESSAGE TYPE E Felder entsperren
vor 6 Tagen von rob_abc gelöst 8 / 8485
ABAP - Mail so10 Text
vor einer Woche von retsch 6 / 2389
selection-screen comment mit icon
vor einer Woche von DeathAndPain 9 / 3665

Unbeantwortete Forenbeiträge

SD_PRINT_TERMS_OF_PAYMENT
vor einer Woche von Manfred K. 1 / 2797
BUSOBJEKT zu CMIS PHIO ermitteln
vor 4 Wochen von snooga87 1 / 4609