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
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