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.
1982
Views
LoA-Nachweis - Download von Ergebnissen
von HLRT67 » 04.12.2007 11:14 • Verfasst in Human Resources
0
Antw.
869
Views
ATC-Browser Eclipse: Ausfiltern von Ergebnissen
von ralf.wenzel » 13.05.2020 06:59 • Verfasst in ABAP® Core
1
Antw.
1848
Views
Exportieren der Ergebnissen einer View
von Fenghuang » 31.08.2020 08:25 • Verfasst in SAP HANA für Anfänger
3
Antw.
2302
Views
Parameter für maximale Anzahl an Ergebnissen (like se16n)
von Mockingbird » 19.03.2020 12:49 • Verfasst in ABAP® Core
6
Antw.
9176
Views
F-32: Ausgleichen mit unterschiedlichen Beträgen
von Blueshape » 05.01.2005 17:02 • Verfasst in Financials

Aktuelle Forenbeiträge

Regex in where
vor einer Stunde von tar 8 / 177
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1489

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

Regex in where
vor einer Stunde von tar 8 / 177
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1489

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822