Hierzu ein Auszug aus der ABAP Schlüsselwortdokumentation:bliP! hat geschrieben:Ist es performanter nach dem select direkt in eine interne Tabelle zu schreiben, statt in einen arbeitsbereich, der dann an die interne tabelle angehängt wird?
Performance:
Ob Daten besser in eine interne Tabelle oder in einen Arbeitsbereich eingelesen werden sollen, hängt von der Art der weiteren Verarbeitung ab: Werden Daten in einem Programm nur einmal benötigt, so sollten sie mit einer SELECT-ENDSELECT-Schleife zeilenweise in einen Arbeitsbereich eingelesen werden. Das Einlesen in eine interne Tabelle benötigt mehr Speicherplatz, ohne diesen Nachteil durch eine wesentlich höhere Lesegeschwindigkeit auszugleichen. Werden Daten dagegen in einem Programm mehrfach benötigt, so sollten sie in eine interne Tabelle eingelesen werden. Der Nachteil des höheren Speicherbedarfs wird hier durch den Vorteil der einmaligen Selektion mehr als kompensiert.
Sollen Daten in eine interne Tabelle eingelesen werden, so ist es günstiger, sie auf einen Schlag in die interne Tabelle einzulesen, als sie Zeile für Zeile in einen Arbeitsbereich und anschließend mit APPEND an die interne Tabelle anzufügen.
Die Varianten ... INTO CORRESPONDING FIELDS OF wa, ... INTO CORRESPONDING FIELDS OF TABLE itab und ... APPENDING CORRESPONDING FIELDS OF TABLE itab benötigen im Vergleich zu den entsprechenden Varianten ohne CORRESPONDING FIELDS eine etwas höhere - von der Größe der Lösungsmenge aber unabhängige - Laufzeit. Sie sollten deshalb möglichst nur bei der Selektion von größeren Datenmengen benutzt werden.
Code: Alles auswählen.
Zusatz
... PERFORMING form
Dieser Zusatz ist im Kontext von ABAP Objects verboten. Siehe Verbot des Unterprogrammaufrufs in EXEC SQL.
Wirkung
Ist das Ergebnis eines SELECT-Befehls eine Tabelle, so erfolgt das Lesen Zeile für Zeile in einer Verarbeitungsschleife. Pro Zeile wird einmal das Unterprogramm form aufgerufen. Die Verarbeitungsschleife kann mit EXIT FROM SQL im Unterprogramm form abgebrochen werden. Ist das Ergebnis der Selektion ein Einzelsatz, so wird form nur einmal aufgerufen.
Beispiel
Anzeigen eines Ausschnitts der Tabelle AVERI_CLNT:
DATA: F1(3), F2(3), F3(3).
F3 = ' 1 '.
EXEC SQL PERFORMING WRITE_AVERI_CLNT.
SELECT CLIENT, ARG1 INTO :F1, :F2 FROM AVERI_CLNT
WHERE ARG2 = :F3
ENDEXEC.
FORM WRITE_AVERI_CLNT.
WRITE: / F1, F2.
ENDFORM.
Hinweis
Dieser Zusatz ist nur bei einem SELECT-Befehl erlaubt.