Performanter Select

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Performanter Select

Beitrag von gs3rr4 (ForumUser / 59 / 22 / 0 ) »
Hallo liebe ABAP Community!

Ich habe eine Frage zu einer Datenbankabfrage und würde mich freuen, wenn mir jemand helfen kann. ;)
Es geht um die Tabellen PA0000 und PA0001.

Als erstes habe ich Personen der Tabelle PA0001 selektiert, die heute gültig und von einen Personalbereich abhängig sind, der von außen hereingereicht wird.

Code: Alles auswählen.

  SELECT *
    FROM pa0001
    INTO lt_pa0001
    WHERE WERKS = iv_persa
    AND ENDDA >= sy-date
    AND BEGDA <= sy-date
    .
Nun möchte ich diese Daten mit der Tabelle PA0000 abgleichen. Als ergebnis möchte ich eine interne Tabelle bekommen in der jede Person nur einmal vorkommt und diese bei dem abgleich eine 3 im Feld STAT2 vorweisen konnte.

Mit einem Loop wäre das einfach zu lösen, jedoch möchte ich nicht für jede Zeile wieder neu auf die Datenbanktabelle selektieren.
Kennt vielleicht jemand einen eleganteren Weg?

Vielen Dank!
Zuletzt geändert von gs3rr4 am 16.07.2014 14:37, insgesamt 1-mal geändert.

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


Re: Performanter Select

Beitrag von a-dead-trousers (Top Expert / 4286 / 214 / 1142 ) »
SELECT ... FOR ALL ENTRIES IN ...
würde mir spontan einfallen.

Da wird die interne Tabelle übergeben und nur die Daten daraus werden selektiert.

Aber Achtung: Die Daten werden in Blöcken (Profilparameter: standardmäßig 5) selektiert ohne das dabei auf Duplikate Rücksicht genommen wird.
Daher empfiehlt es sich vorab die interne Tabelle zu sortieren und duplikate zu entfernen, da sonst unnötigerweise Einträge doppelt von der Datenbank selektiert werden. Diese tauchen dann im Endergebnis zwar nicht auf, belasten aber trotzdem die Datenbank.

Zweites Aber: Diese Variante mag zwar schnell programmiert sein, ergibt aber mitunter nicht immer die schnellste Verarbeitung.
Beispiel: Die interne Tabelle hat 10.000 individuelle Einträge und ergibt normalerweise eine Anzahl von 2.000 individuellen Datenbankabfragen.
Was aber, wenn der Zugriffschlüssel auf die Datenbank nur ein Feld ist, dass noch dazu nicht sehr breit (ca. 10 - 20 Zeichen) ist?
Dann könnte man ALLE Einträge über eine RANGE-Tabelle auf einmal selektieren lassen, was die Datenbank(-Schnittstelle) erheblich entlastet.

Code: Alles auswählen.

data: 
  lt_range like range of it_table-field.
field-symbols: 
  <ls_range> like line of lt_range,
  <ls_line> like line of it_table.

loop at it_table assigning <ls_line>.
  append initial line to lt_range assigning <ls_range>.
  <ls_range>-sign = 'I'.
  <ls_range>-option = 'EQ'.
  <ls_range>-low = <ls_line>-field.
endloop.

SELECT *
  FROM table
  INTO lt_table
  WHERE field IN lt_range.
Wichtig dabei ist, dass die Länge der im Hintergrund entstehenden SQL-Query nicht die max. Größe überschreitet (Profilparameter: standardmäßig 2 MB)

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
gs3rr4

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

7
Antw.
4233
Views
Select performanter machen
von nikibert » 06.08.2008 14:58 • Verfasst in ABAP® für Anfänger
5
Antw.
4277
Views
Was ist performanter? Select auf DB oder Read auf itab?
von airwaver » 06.06.2007 13:05 • Verfasst in ABAP® Core
2
Antw.
2336
Views
Select * und Select von einzelnen Werten zugleich
von StefanJue » 04.10.2006 18:10 • Verfasst in ABAP® für Anfänger
2
Antw.
705
Views
Job hängt an select, wie herausfinden welches select
von dpz » 01.08.2019 10:23 • Verfasst in ABAP® Core
10
Antw.
5796
Views
2 Select-Options zu einem für Select zusammenfügen
von manuk » 23.03.2005 11:02 • Verfasst in ABAP® Core

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

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.