Hallo Ralf,
Du findest es besser die DB mit Anfragen nach Einzelsätzen zuzutackern?
Nein.
Es gibt es nur zwei Möglichkeiten, Einzelsätze aus der Datenbank zu lesen: SELECT SINGLE mit vollqualifiziertem Schlüssel oder ein SELECT...ENDSELECT, der aufgrund der WHERE-Bedingung nur einen Ergebnissatz liefert.
Ansonsten macht die Datenbank auch beim SELECT...ENDSELECT einen Array Fetch, d.h. es werden immer soviel Datensätze auf einmal gelesen, wie in den (datenbankabhängigen) Puffer passen; das können bei einer knappen Feldliste einige Tausend Sätze sein, wie man beim SQL-Trace sehen kann.
Die Wirkung ist ähnlich wie bei FOR ALL ENTRIES, wobei die Sätze aus der ITAB blockweise gelesen werden.
Im übrigen geht auf der Datenbank auch nicht mehr viel, wenn sich jemand die BSEG mit SELECT INTO TABLE reinzieht.
Der (relativ geringe) Performance-Gewinn des einzelnen Reports geht zum einen auf Kosten der Gesamtperformance des Systems und wird zum anderen in der Regel durch endlose LOOPs über die interne(n) Tabelle(n) wieder verspielt.
Programme mit konsequentem SELECT INTO TABLE haben den schweren Geburtsfehler, daß sie prinzipiell immer zum Kurzdump führen, wenn nur die Datenbasis genügend groß und/oder die Selektionen genügend weit sind.
Ein gutes Programm zeichnet sich aber nicht nur durch gute Performance aus, es sollte darüber hinaus auch kooperativ und skalierbar sein. Die beiden letzten Kriterien sind bei Programmen mit SELECT INTO TABLE in der Regel nicht erfüllt.
MfG Jürgen