Ansicht
Dokumentation
ABAPSELECT_CLAUSE_COLS - SELECT CLAUSE COLS
General Material Data General Data in Customer MasterDiese Dokumentation steht unter dem Copyright der SAP AG.
SELECT - select_list
Syntax
... *
| {..., data_source~*, ...,
col_spec [AS alias], ...}
| (column_syntax) ...
Alternativen:
1. ...
*
2. ..., data_source~*, ..., col_spec [AS alias], ...
3. ... (column_syntax)
Wirkung
SELECT-Liste. Die Angaben legen fest, aus welchen Spalten die Ergebnismenge aufgebaut ist und wie deren Werte ermittelt werden. Es gibt zwei statische und eine dynamische Variante.
Die Ergebnismenge, die mit den hier gezeigten Angaben definiert wird, wird durch den Zusatz INTO
CORRESPONDING beeinflusst. Wenn es mindestens eine Namensübereinstimmung gibt, werden
alle Spalten, für die es keine Namensübereinstimmung gibt, aus der Ergebnismenge entfernt. Wenn es keine Namensübereinstimmung gibt, werden keine Spalten aus der Ergebnismenge entfernt.
Alternative 1
... *
Wirkung
Definition aller Spalten der Ergebnismenge über *. Die Ergebnismenge ist aus allen Spalten der hinter FROM angegebenen Datenbanktabellen bzw. Views in der dort vorgegebenen Reihenfolge aufgebaut. Die Spalten der Ergebnismenge übernehmen Namen und Datentypen aus den Datenbanktabellen bzw. Views. Hinter INTO kann nur ein einziges Datenobjekt angegeben werden, aber keine Liste von Datenobjekten.
Hinweise
-
Wenn hinter FROM mehrere Datenbanktabellen angegeben sind, kann bei der Angabe von * nicht verhindert werden, dass mehrere Spalten den gleichen Namen haben.
-
Aus Performancegründen empfiehlt es sich immer nur die Spalten anzugeben, die tatsächlich
benötigt werden. Die Angabe von * sollte also nur erfolgen, wenn tatsächlich der Inhalt aller Spalten benötigt wird.
Beispiel
Lesen aller Spalten mehrerer Zeilen.
DATA wa TYPE spfli.
SELECT *
FROM spfli
WHERE carrid = 'LH'
INTO CORRESPONDING FIELDS OF @wa.
ENDSELECT.
Alternative 2
..., data_source~*, ..., col_spec [AS alias], ...
Varianten:
1. ... data_source~* ...
2. ... col_spec [AS alias] ...
Wirkung
Kommaseparierte Liste mit der Angabe
-
data_source~* aller Spalten einer Datenquelle data_source oder
-
einzelner Spalten col_spec.
Die einzelnen Angaben können beliebig kombiniert werden, mit der Ausnahme, dass data_source~* nicht zusammen mit Aggregatausdrücken verwendet werden kann.
Hinweis
Bei Verwendung der kommaseparierten Liste wird die Syntaxprüfung in einem
strikten Modus ausgeführt,
welche die Anweisung strenger behandelt als die normale Syntaxprüfung. Die Angabe einzelner leerzeichenseparierter Spalten ist
obsolet.
Variante 1
... data_source~* ...
Wirkung
Definition mehrerer Spalten der Ergebnismenge über
data_source~*, wobei data_source für einzelne Datenbanktabellen dbtab,
klassische Views view oder
CDS-Views cds_view steht. Die
Ergebnismenge enthält an der entsprechenden Stelle alle Spalten der angegebenen Datenbanktabelle
bzw. View data_source in deren Reihenfolge. Für data_source dürfen die Namen
der Datenbanktabellen bzw. Views oder deren Aliasnamen angegeben werden, die auch als data_source
hinter FROM aufgeführt sind.
Eine Datenbanktabelle bzw. View kann auch mehrfach aufgeführt werden. Bei der Verwendung von
data_source~* kann hinter INTO nur eine Struktur angegeben werden, aber kein elementares Datenobjekt und keine Liste von Datenobjekten.
Hinweise
-
Aus Performancegründen empfiehlt es sich immer nur die Spalten anzugeben, die tatsächlich
benötigt werden. Die Angabe von data_source~* sollte also nur erfolgen, wenn tatsächlich der Inhalt aller Spalten benötigt wird.
-
Die Definition der Ergebnismenge kann auch aus der Angabe einer einzigen Datenbanktabelle bzw. View
dbtab~* bestehen. Dies definiert die gleiche Ergebnismenge wie die Angabe *, unterscheidet
sich von dieser aber bezüglich der möglichen Angaben hinter INTO und des diesbezüglichen Verhaltens.
-
Eine Angabe data_source~* kann nicht mit Aggregatausdrücken kombiniert werden.
-
Bei der Verwendung von data_source~* wird die Syntaxprüfung in einem
strikten Modus ausgeführt, welche die Anweisung strenger behandelt als die normale Syntaxprüfung.
Beispiel
Einlesen der Spalten von zwei an einem Join beteiligten Datenbanktabellen in eine interne Tabelle. Von SCARR werden zwei und von SPFLI alle Spalten gelesen.
TYPES BEGIN OF structure.
TYPES carrname TYPE scarr-carrname.
INCLUDE TYPE spfli AS spfli.
TYPES url TYPE scarr-url.
TYPES END OF structure.
DATA itab TYPE STANDARD TABLE OF structure WITH EMPTY KEY.
SELECT scarr~carrname, spfli~*, scarr~url
FROM scarr INNER JOIN spfli ON scarr~carrid = spfli~carrid
INTO TABLE @itab.
cl_demo_output=>display( itab ).
Variante 2
... col_spec [AS alias] ...
Wirkung
Definition einzelner Spalten der Ergebnismenge über Spaltenangaben col_spec, die Namen von Spalten, Aggregatfunktionen oder SQL-Ausdrücke sein können. Die Reihenfolge, in der die Spaltenangaben gemacht werden, ist beliebig und definiert die Reihenfolge der Spalten in der Ergebnismenge. Nur wenn direkt eine Spalte vom Typ LCHR oder LRAW aufgeführt wird, muss auch das zugehörige Längenfeld unmittelbar davor aufgeführt werden. Eine einzelne Spalte kann auch mehrmals angegeben werden. Hinter INTO können verschiedene Angaben gemacht werden, deren Zusammenspiel mit der Spaltenangabe dort beschrieben ist.
Durch den Zusatz AS kann für jede Spaltenangabe col_spec ein maximal dreißigstelliger alternativer Spaltenname alias in der Ergebnismenge definiert werden. Der alternative Spaltenname alias darf Buchstaben, Ziffern, das Minuszeichen (-) und den Unterstrich (_) in beliebiger Reihenfolge enthalten.
Ein alternativer Spaltenname darf nicht mehrfach vergeben werden und sollte auch nicht der Name einer Spalte sein, der kein alternativer Spaltenname zugeordnet ist. Im Zusatz INTO|APPENDING CORRESPONDING FIELDS wird implizit der alternative Spaltenname verwendet. Explizit kann ein alternativer Spaltenname nur hinter ORDER BY angegeben werden. Ein nicht eindeutiger Spaltenname führt hinter ORDER BY zu einem Syntaxfehler oder einer Ausnahme.
Hinweise
-
Sind hinter FROM mehrere Datenbanktabellen angegeben, kann bei der Angabe einzelner Spalten durch die Verwendung von Alternativnamen verhindert werden, dass mehrere Spalten den gleichen Namen haben.
-
Die obsolete Kurzform ohne explizite
Angabe eines Zielbereichs ist bei der Angabe einzelner Spalten nicht möglich. Die einzige Ausnahme ist die Angabe von nichts als der Aggregatfunktion count( *
) wenn für diese kein alternativer Spaltenname und wenn keine GROUP BY-Klausel angegeben ist.
-
Statt durch Kommata können die Spaltenangaben in einer
obsoleten Form auch noch durch Leerzeichen separiert werden. In den
strikten Modi der Syntaxprüfung ab Release 7.40, SP05 müssen aber Kommata verwendet werden.
-
Wenn ein alternativer Spaltenname genau wie ein Zusatz der SELECT-Anweisung heißen soll,
kann es notwendig sein, das Fluchtsymbol ! voranzustellen.
Beispiel
Ausgabe des Flugdatums und des durchschnittlichen Buchungspreises aller Kunden der Lufthansa-Flüge mit der Flugnummer 0400. Der Alternativname avg des Aggregatausdrucks wird für das Sortieren der Ergebnismenge und die Zuordnung zu den Spalten der Zieltabelle über CORRESPONDING FIELDS gebraucht.
TYPES: BEGIN OF wa,
fldate TYPE sbook-fldate,
avg TYPE sbook-loccuram,
END OF wa.
DATA itab TYPE TABLE OF wa WITH EMPTY KEY.
SELECT fldate, AVG( loccuram ) AS avg
FROM sbook
WHERE sbook~carrid = 'LH' AND
sbook~connid = '0400'
GROUP BY fldate
ORDER BY avg DESCENDING
INTO CORRESPONDING FIELDS OF TABLE @itab.
cl_demo_output=>display( itab ).
Alternative 3
... (column_syntax)
Wirkung
Statt der vorhergehenden beiden statischen Angaben kann ein eingeklammertes Datenobjekt column_syntax angegeben werden, das bei Ausführung der Anweisung die bei den statischen Angaben gezeigte Syntax enthält oder initial ist. Das Datenobjekt column_syntax kann ein zeichenartiges Datenobjekt oder eine Standardtabelle ohne sekundäre Tabellenschlüssel mit zeichenartigem Zeilentyp sein. Die Syntax in column_syntax ist wie im ABAP Editor unabhängig von Groß- und Kleinschreibung. Bei der Angabe einer internen Tabelle kann die Syntax auf mehrere Zeilen verteilt sein.
Wenn column_syntax bei Ausführung der Anweisung initial ist, wird select_list implizit auf * gesetzt und alle Spalten werden gelesen.
Bei einer dynamischen Spaltenangabe ohne den Zusatz SINGLE wird die Ergebnismenge immer als mehrzeilig betrachtet. Siehe SQL-Injections über dynamische Tokens.
Hinweise
-
Beim dynamischen Zugriff auf Pool- oder
Cluster-Tabellen führt die Verwendung des Zusatzes DISTINCT zu einer behandelbaren Ausnahme.
-
Falls column_syntax eine interne Tabelle mit
Kopfzeile ist, wird der
Tabellenkörper, nicht die Kopfzeile ausgewertet.
-
Die Klasse CL_ABAP_DYN_PRG enthält Methoden, welche die Erstellung korrekter und sicherer dynamischer Spaltenangaben unterstützen.
Beispiel
Je nach Eingabe von 'CITYFROM' bzw. 'CITYTO' werden alle Abflugorte bzw. Zielorte der Lufthansa-Flüge ausgegeben. Mit einer Methode der Klasse CL_ABAP_DYN_PRG wird überprüft, ob die Eingabewerte erlaubt sind.
DATA: comp TYPE c LENGTH 16,
dref TYPE REF TO data.
cl_demo_input=>request( CHANGING field = comp ).
TRY.
comp =
cl_abap_dyn_prg=>check_whitelist_tab(
val = to_upper( comp )
whitelist = VALUE string_hashed_table( ( `CITYFROM` )
( `CITYTO` ) ) ).
CATCH cx_abap_not_in_whitelist.
cl_demo_output=>display( 'Not allowed' ).
LEAVE PROGRAM.
ENDTRY.
DATA(long_name) = `SPFLI-` && comp.
CREATE DATA dref TYPE (long_name).
ASSIGN dref->* TO FIELD-SYMBOL(<fs>).
DATA output TYPE TABLE OF string WITH EMPTY KEY.
SELECT DISTINCT (comp)
FROM spfli
WHERE carrid = 'LH'
INTO @<fs>.
APPEND |{ <fs> }| TO output.
ENDSELECT.
cl_demo_output=>display( output ).
Beispiel
Kommentarzeichen in einer dynamischen Token-Angabe. Die mit * eingeleiteten Zeilen und die Inhalte ab dem Zeichen " werden ignoriert.
DATA: itab TYPE TABLE OF scarr,
columns TYPE TABLE OF string.
columns = VALUE #( ( `* Comment` )
( `carrid, "comment` )
( `* Comment` )
( `carrname "comment` ) ).
SELECT (columns)
FROM scarr
INTO CORRESPONDING FIELDS OF TABLE @itab.
cl_demo_output=>display( itab ).
Beispiel
Siehe SELECT, dynamische Token-Angabe
Fill RESBD Structure from EBP Component Structure ABAP Short Reference
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 18808 Date: 20240523 Time: 141018 sap01-206 ( 200 ms )