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

Aktuelle Forenbeiträge

line_exists evaluieren
vor 2 Tagen von Radinator gelöst 6 / 201
Was zum Knobeln....
vor 2 Tagen von a-dead-trousers 5 / 385

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

line_exists evaluieren
vor 2 Tagen von Radinator gelöst 6 / 201
Was zum Knobeln....
vor 2 Tagen von a-dead-trousers 5 / 385

Unbeantwortete Forenbeiträge

Erweiterung in ME51N/ME52N:
vor einer Woche von ABAPlerv 1 / 1591
Erweiterung in ME51N/ME52N:
vor einer Woche von ABAPlerv 1 / 1510