Ansicht
Dokumentation
ABAPSELECT_LIST - SELECT LIST
PERFORM Short Reference ROGBILLS - Synchronize billing plansDiese Dokumentation steht unter dem Copyright der SAP AG.
SELECT, select_list
... *
$| ${..., data_source~*, ...,
col_spec $[AS alias$], ...$}
$| (column_syntax) ...
Alternativen:
1. ...
*
2. ..., data_source~*, ..., col_spec $[AS alias$], ...
3. ... (column_syntax)
Wirkung
SELECT-Liste der SELECT-Klausel einer Query. Die Angaben legen fest, aus welchen Spalten die Ergebnismenge der SELECT-Anweisung aufgebaut ist und wie deren Werte ermittelt werden. Es gibt zwei statische und eine dynamische Variante.
Die tatsächlich an Datenbank übergebene SELECT-Liste 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, implizit aus der in der SELECT-Liste
und damit 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 Datenquellen in der dort vorgegebenen Reihenfolge aufgebaut. Die Spalten der Ergebnismenge übernehmen Namen und Datentypen aus den Datenquellen. Hinter INTO kann nur ein einziges Datenobjekt angegeben werden, aber keine Liste von Datenobjekten.
Hinweise
- Wenn hinter FROM mehrere DDIC-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 data_source~* sollte also nur erfolgen, wenn tatsächlich der Inhalt aller Spalten benötigt wird.
- Bei Verwendung des Zusatzes INTO CORRESPONDING kann die Angabe * implizit in eine Liste der Spalten verwandelt werden, für die es eine Namensübereinstimmung gibt.
- Wenn in der FROM-Klausel eines
allgemeinen
Tabellenausdrucks hinter WITHauf eine
interne Tabelle @itab mit elementarem Zeilentyp zugegriffen wird, kann * nicht als SELECT-Liste angegeben werden.
Beispiel
Lesen aller Spalten mehrerer Zeilen.
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
- der Definition einzelner Spalten col_spec der Ergebnismenge.
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 einer 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 eine einzelne DDIC-Datenbanktabelle dbtab, DDIC-View view, nicht-abstrakte CDS-Entität cds_entity oder interne Tabelle steht. Die Ergebnismenge enthält an der entsprechenden Stelle alle Spalten der angegebenen Datenquelle data_source in deren Reihenfolge. Für data_source dürfen die Namen der Datenquellen oder deren Aliasnamen angegeben werden, die auch als data_source hinter FROM aufgeführt sind. Eine Datenquelle 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.
Folgende Sonderfälle sind zu beachten:
- Eine Angabe data_source~* kann nicht mit Aggregatausdrücken kombiniert werden. Sie kann jedoch mit Fensterausdrücken kombiniert werden.
- Bei der Verwendung von UNION, INTERSECT oder EXCEPT kann data_source~* nicht in der SELECT-Liste angegeben werden.
- Wenn in der FROM-Klausel eines allgemeinen Tabellenausdrucks hinter WITHauf eine interne Tabelle @itab mit elementarem Zeilentyp zugegriffen wird, kann data_source~* nicht in der SELECT-Liste angegeben werden.
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 Datenquelle data_source~* 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.
- 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 DDIC-Datenbanktabellen in eine interne Tabelle. Von SCARR werden zwei und von SPFLI alle Spalten gelesen.
Variante 2
... col_spec $[AS alias$] ...
Zusatz:
Wirkung
Definition einzelner Spalten der Ergebnismenge über Spaltenangaben col_spec, die über beliebige SQL-Ausdrücke definiert werden können. Die Reihenfolge, in der die Spaltenangaben gemacht werden, ist beliebig und definiert die Reihenfolge der Spalten in der Ergebnismenge. Nur wenn eine Spalte vom Typ LCHR oder LRAW direkt als col aufgeführt wird, muss auch das zugehörige Längenfeld unmittelbar davor aufgeführt werden. Hinter INTO können verschiedene Angaben gemacht werden, deren Zusammenspiel mit der Spaltenangabe dort beschrieben ist.
Hinweise
- Die obsolete Kurzform ohne explizite Angabe eines Zielbereichs ist bei der Angabe einzelner Spalten nicht möglich. Die einzige Ausnahme ist die statische Angabe von nichts als der Aggregatfunktion count( * ) wenn für diese kein Aliasname 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 müssen aber Kommata verwendet werden.
Beispiel
Einlesen von zwei Spalten einer Zeile der DDIC-Datenbanktabelle SCARR.
Zusatz
... AS alias
Wirkung
Durch den Zusatz AS kann für jede Spaltenangabe col_spec ein maximal dreißigstelliger Aliasname alias in der Ergebnismenge definiert werden. Der Aliasname alias muss im Wesentlichen den Namenskonventionen für programminterne Bezeichner folgen und der Name table_line darf nicht verwendet werden. Dies wird im strikten Modus der Syntaxprüfung ab Release überprüft.
Ein Aliasname darf nicht mehrfach vergeben werden und sollte auch nicht der Name einer Spalte sein, der kein Aliasname zugeordnet ist. Im Zusatz INTO$|APPENDING CORRESPONDING FIELDS OF wird implizit der Aliasname verwendet. Explizit kann ein Aliasname 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 DDIC-Datenbanktabellen angegeben, kann bei der Angabe einzelner Spalten durch die Verwendung von Alternativnamen verhindert werden, dass mehrere Spalten den gleichen Namen haben.
- Ein Aliasname kann nicht als Operand eines SQL-Ausdrucks verwendet werden.
- Wenn ein Aliasname genau wie ein Zusatz der SELECT-Anweisung heißen soll, kann es notwendig sein, das Fluchtsymbol ! voranzustellen.
- Außerhalb des strikten Modus der Syntaxprüfung ab Release kann ein Aliasname auch noch Minuszeichen
(-) enthalten, was Zuweisungen an Komponenten von Unterstrukturen mit dem Zusatz CORRESPONDING
FIELDS OF in der INTO-Klausel erlaubt.
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 die
ORDER BY-Klausel und die Inline-Deklaration mit @DATA(...)
in der INTO-Klausel benötigt.
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 ausgenommen Hostausdrücke enthält oder initial ist.
Das Datenobjekt column_syntax kann ein zeichenartiges Datenobjekt oder eine Standardtabelle mit zeichenartigem Zeilentyp sein. Die Syntax in column_syntax ist wie in der statischen Syntax 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.
Ungültige Syntax führt zu einer behandelbaren Ausnahme der Klasse CX_SY_DYNAMIC_OSQL_ERROR. Siehe SQL-Injections über dynamische Tokens.
Hinweise
- 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.
- In einer dynamischen Spaltenangabe darf nicht von außen auf statische Attribute oder Konstanten einer Klasse zugegriffen werden, wenn diese einen statischen Konstruktor hat und dieser noch nicht ausgeführt wurde.
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.
Beispiel
Kommentarzeichen in einer dynamischen Token-Angabe. Die mit * eingeleiteten Zeilen und die Inhalte ab dem Zeichen " werden ignoriert.
Spalten aus der SELECT-Liste entfernen
RFUMSV00 - Advance Return for Tax on Sales/Purchases General Material Data
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 18073 Date: 20240523 Time: 135635 sap01-206 ( 258 ms )