Select mit unterschiedlichen Ergebnissen

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
16 Beiträge • Vorherige Seite 2 von 2 (current)
16 Beiträge Vorherige Seite 2 von 2 (current)

Re: Select mit unterschiedlichen Ergebnissen

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
Einfach mal die F1-Hilfe zu FOR ALL ENTRIES IN itab lesen.
Das Verhalten, dass Duplikate entfernt werden, ist dokumentiert.
Dies ist neben dem ebenfalls dokumentierten, aber ohne Lesen der Doku erst mal unerwarteten Verhalten, dass bei leerer itab alles selektiert wird, egal, was es sonst noch an WHERE-Bedingungen gibt, der zweithäufigste Fehler, der bei SELECT ... FOR ALL ENTRIES IN gemacht wird. Weh tut das v.a., wenn man Betragsfelder selektiert, aber nicht alle Schlüsselfelder mit selektiert bzw. durch eindeutige Selektionsbedingung (bukrs EQ p_bukrs) ausschließt.
(Das wird auch im SAP-Standard gern mal falsch gemacht.)

Grund dafür, dass Duplikate aus der Ergebnismenge entfernt werden, ist, dass ein SELECT ... FOR ALL ENTRIES u.U. in mehrere SELECTs an die DB zerlegt wird (Gründe: Max. zulässige Größe eines SQL statements und/oder Profile-Parameter dafür, wie viele itab-EInträge maximal in einem SELECT an die DB zusammengefasst werden dürfen).

Und da SAP nicht erzwingt, dass die itab frei von Duplikaten sein muss, werden eben die Duplikate aus der Ergebnismenge entfernt.


Vorteil des SELECT ... FOR ALL ENTRIES ist, dass es nicht (wie bei SELECT-OPTIONS) zu einem Dump wegen Überschreiten der Maximalgröße eines SELECT-Statements kommt.
(Seit SAP-Basis 7.0 hat SAP die entsprechenden Puffer vergrößert, so dass man das Problem seltener hat.)

Weiterer Vorteil ist, dass man die Bedingungen für mehrere Felder zeilenweise verknüpfen kann.

Nachteil kann, insbesondere bei itabs mit vielen Einträgen und WHERE-Bedingung ohne passenden Index-Bezug, die im Vergleich zu SELECT-OPTIONS massiv schlechtere Laufzeit sein.

Denn während 200 Einträge einer SELECT-OPTION problemlos in ein SELECT-Statement passen, werden bei SELECT FOR ALL ENTRIES (bei Default-Konfiguration des Systems und ohne %_HINTS) etliche Statements an die DB abgesetzt.

Und wenn dann kein passender Index benutzt werden kann, kommt es eben statt zu einem Full Table Scan zu etlichen Full Table Scans.


Frank

Folgende Benutzer bedankten sich beim Autor Frank Dittrich für den Beitrag:
Prego


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


Vergleichbare Themen

3
Antw.
2253
Views
LoA-Nachweis - Download von Ergebnissen
von HLRT67 » 04.12.2007 11:14 • Verfasst in Human Resources
0
Antw.
1126
Views
ATC-Browser Eclipse: Ausfiltern von Ergebnissen
von ralf.wenzel » 13.05.2020 06:59 • Verfasst in ABAP® Core
1
Antw.
4999
Views
Exportieren der Ergebnissen einer View
von Fenghuang » 31.08.2020 08:25 • Verfasst in SAP HANA für Anfänger
3
Antw.
2935
Views
Parameter für maximale Anzahl an Ergebnissen (like se16n)
von Mockingbird » 19.03.2020 12:49 • Verfasst in ABAP® Core
4
Antw.
2336
Views
Selektionen von unterschiedlichen matnr
von Gottschall » 13.02.2014 19:04 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

IBAN und BUT0BK
vor 14 Stunden von DeathAndPain gelöst 7 / 7784
SAPGui 8.00 32 Bit vs 64 Bit
vor 14 Stunden von DeathAndPain 3 / 1162
Programm per Fremdtransport einspielen
vor 17 Stunden von IHe 3 / 566
Splitter-AlV erscheint nicht
vor 20 Stunden von qyurryus 2 / 573

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

IBAN und BUT0BK
vor 14 Stunden von DeathAndPain gelöst 7 / 7784
SAPGui 8.00 32 Bit vs 64 Bit
vor 14 Stunden von DeathAndPain 3 / 1162
Programm per Fremdtransport einspielen
vor 17 Stunden von IHe 3 / 566
Splitter-AlV erscheint nicht
vor 20 Stunden von qyurryus 2 / 573