Ansicht
Dokumentation

ABAPSELECT_LIST - SELECT LIST

ABAPSELECT_LIST - SELECT LIST

PERFORM Short Reference   ROGBILLS - Synchronize billing plans  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

SELECT, select_list

Kurzreferenz



... *
  $| ${..., 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.
  • Bei der Verwendung von UNION, INTERSECT oder EXCEPT 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:

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

... AS alias

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 )