Ansicht
Dokumentation

ABAPSELECT_CLAUSE_COL_SPEC - SELECT CLAUSE COL SPEC

ABAPSELECT_CLAUSE_COL_SPEC - SELECT CLAUSE COL SPEC

General Material Data   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

SELECT, col_spec

Kurzreferenz



... sql_exp ...

Alternativen:

1. ... col

2. ... literal $| @dobj $| @( expr )

3. ... sql_func $| sql_arith $| sql_cast $| sql_string $| sql_case

4. ... sql_agg

5. ... sql_win

Wirkung

Spaltenangabe in der SELECT-Liste der SELECT-Klausel einer Query. Die Spaltenangaben dienen dem Aufbau der Ergebnismenge einer Query aus einzelnen Spalten. Jede Spaltenangabe erfolgt durch einen SQL-Ausdruck sql_exp. Es können beliebige SQL-Ausdrücke und Klammerungen verwendet werden

Jeder SQL-Ausdruck bestimmt aus seinen Argumenten einen Wert mit einem vom Ausdruck abhängigen Datentyp und stellt diesen für die aktuelle Zeile in die Spalte der Ergebnismenge. Die entsprechende Hostvariable hinter INTO bzw. APPENDING muss passend gewählt werden.

Um das Ergebnis von SQL-Ausdrücken außer einzelnen Spaltenangaben in INTO$|APPENDING CORRESPONDING FIELDS, INTO ...@DATA(...) und ORDER BY auswerten zu können, muss mit AS ein Aliasname definiert werden, der dann von diesen Zusätzen verwendet wird.

Die folgenden Abschnitte gehen auf die Besonderheiten der verschiedenen SQL-Ausdrücke ein.

Hinweis

Bestimmte SQL-Ausdrücke können im Tabellenpuffer berechnet werden. Die Verwendung der übrigen SQL-Ausdrücke führt zur Umgehung der Tabellenpufferung.

Alternative 1

... col


Wirkung

Direkte Angabe col einer einzelnen Spalte einer Datenquelle als elementarer SQL-Ausdruck. Wenn der Bezeichner einer Spalte einer Datenquelle direkt angegeben ist, wird deren Inhalt direkt in die zugehörige Spalte der Ergebnismenge gestellt. Der Datentyp der Spalte in der Ergebnismenge ist der Datentyp der entsprechenden Komponente im ABAP Dictionary.

Es gelten folgende spezielle Bedingungen:

  • Die Spaltenangabe kann gegebenenfalls einen Pfadausdruck für CDS-Assoziationen oder CTE-Assoziationen enthalten. Wenn in der INTO-Klausel der Zusatz CORRESPONDING oder eine Inline-Deklaration @DATA(...) oder @FINAL(...) verwendet wird, müssen Spalten, die über einen Pfadausdruck angegeben werden, einen mit AS definierten Aliasnamen alias haben.
  • Falls der Wert einer Spalte vom Typ LRAW oder LCHR gelesen wird, muss auch das zugehörige Längenfeld vom Typ INT2 oder INT4 gelesen werden und dieses muss in der Liste vor der Spalte vom Typ LRAW oder LCHR aufgeführt sein.

Hinweise

  • Eine Spalte kann auch mehrmals angegeben werden.
  • Die direkte Angabe einzelner Spalten war bereits vor der Einführung von SQL-Ausdrücken möglich und führt deshalb nicht zum strikten Modus der Syntaxprüfung, der ansonsten durch SQL-Ausdrücke bewirkt wird.

Beispiel

Direkte Angabe der Spalten CARRID, CARRNAME und URL der DDIC-Datenbanktabelle SCARR.

Alternative 2

... literal $| @dobj $| @( expr )


Wirkung

Angabe eines Literals literal, einer Hostvariable @dobj oder eines Hostausdrucks @( expr ) als elementarer SQL-Ausdruck. Es handelt sich um Werte des ABAP-Programms, die vor der Ausführung der Query in ABAP bestimmt und an das Datenbanksystem übergeben werden, wo sie als Spalte in die Ergebnismenge eingefügt werden. Eine so definierte Spalte enthält in allen Zeilen der Ergebnismenge den gleichen Wert.

Hinweise

  • Bezüglich der verwendbaren Datentypen gelten die Einschränkungen für elementare SQL-Ausdrücke. Insbesondere dürfen Hostvariablen, die in Form von Feldsymbolen oder Formalparametern angegeben werden, keinen generischen Datentyp haben.
  • Die Angabe eines Literals, einer Hostvariable oder eines Hostausdrucks als elementarer Ausdruck kann in einer SELECT-Liste sinnvoll sein, um einer Spalte einer Ergebnismenge, die nicht aus der Datenbank gelesen wird, einen definierten Wert zuzuweisen.
  • Über die Angabe einer Konstanten oder eines Literals als einziges Element einer SELECT-Liste kann festgestellt werden, ob Daten zu einer Selektion vorhanden sind, ohne dass Daten von der Datenbank gelesen werden müssen.
  • Literale, Hostvariablen und Hostausdrücke werden in der SELECT-Liste als echte SQL-Ausdrücke behandelt, die zu einem strikten Modus der Syntaxprüfung führen und die nicht zusammen mit FOR ALL ENTRIES verwendet werden können.

Beispiel

Angabe der Konstante abap_true aus der Typgruppe ABAP um festzustellen, ob eine bestimmte Zeile vorhanden ist.

Alternative 3

... sql_func $| sql_arith $| sql_cast $| sql_string $| sql_case


Wirkung

Angabe eines nicht elementaren SQL-Ausdrucks in Form einer eingebauten Funktion sql_func, eines arithmetischen Ausdrucks sql_arith, eines Cast-Ausdrucks sql_cast, eines Zeichenkettenausdrucks sql_string oder einer Fallunterscheidung sql_case. Die Werte dieser Ausdrücke werden auf der Datenbank berechnet. Es gelten die bei ihnen beschriebenen Regeln und Einschränkungen. Die Werte von als Operanden angegebenen Spalten von Datenquellen sind die selektierten Werte der aktuellen Zeile.

Hinweis

Die nicht elementaren SQL-Ausdrücke führen zu einem strikten Modus der Syntaxprüfung und können nicht zusammen mit FOR ALL ENTRIES verwendet werden. In den Ausdrücken sind keine LOBs bearbeitbar.

Beispiel

Verwendung eines nicht elementaren SQL-Ausdrucks als Spaltenangabe.

Alternative 4

... sql_agg


Wirkung

Angabe eines Aggregatausdrucks sql_agg, in dem eine Spalte einer Datenquelle oder ein SQL-Ausdruck als Argument einer Aggregatfunktion aufgeführt ist. Eine Aggregatfunktion berechnet aus den Werten der angegebenen Spalte bzw. des SQL-Ausdrucks aus mehreren Zeilen einen einzelnen Wert mit einem von der Aggregatfunktion abhängigen Datentyp und stellt diesen in die Spalte der Ergebnismenge.

Bei der Verwendung von Aggregatausdrücken in der SELECT-Liste gelten folgende Regeln:

  • Wenn Aggregatausdrücke verwendet werden, müssen alle Spaltenbezeichner, die nicht innerhalb eines Aggregatausdrucks aufgeführt sind, hinter dem Zusatz GROUP BY aufgeführt werden. Die Aggregatfunktionen werten die Inhalte der durch GROUP BY definierten Gruppen im Datenbanksystem aus und übergeben das Ergebnis in die zusammengefassten Zeilen der Ergebnismenge.
  • Wenn der Zusatz FOR ALL ENTRIES vor WHERE verwendet wird, können keine Aggregatausdrücke außer COUNT( * ) verwendet werden. Die Auswertung des Aggregatausdrucks erfolgt in diesen Fällen aber nicht auf der Datenbank sondern wird auf dem AS ABAP emuliert.
  • Wenn in der SELECT-Liste Spalten nur innerhalb von Aggregatausdrücken verwendet werden, ist die Ergebnismenge einzeilig und der Zusatz GROUP BY nicht notwendig. Wenn bei ausschließlich aggregierten Spalten und ohne den Zusatz GROUP BY hinter einer einzelnen SELECT-Anweisung, d.h. nicht bei über UNION, INTERSECT oder EXCEPT verknüpften mehreren Anweisungen, ein nicht-tabellenartiger Zielbereich hinter INTO angegeben ist, kann wie bei Verwendung des Zusatzes SINGLE die Anweisung ENDSELECT nicht angegeben werden. Wenn der Aggregatausdruck COUNT( * ) nicht verwendet wird, kann unabhängig vom Zusatz GROUP BY hinter INTO auch eine interne Tabelle angegeben werden und es wird deren erste Zeile gefüllt.
  • Bei ausschließlich aggregierten Spalten ohne gleichzeitige Angabe von GROUP BY enthält die Ergebnismenge auch dann eine Zeile, wenn keine Daten auf der Datenbank gefunden wurden. Bei der Verwendung von COUNT( * ) enthält die betreffende Spalte dann den Wert 0. Die Spalten der übrigen Aggregatfunktionen enthalten Initialwerte. Diese Zeile wird dem hinter INTO angegebenen Datenobjekt zugewiesen und außer bei der ausschließlichen statischen Verwendung von COUNT( * ) ohne Angabe eines Aliasnamens wird sy-subrc auf 0 und sy-dbcnt auf 1 gesetzt.
  • Bei der ausschließlichen Verwendung von COUNT( * ) als einzige statische Spaltenangabe ohne Angabe eines Aliasnamens mit AS und ohne gleichzeitige Angabe von GROUP BY kann der Zusatz INTO weggelassen werden. Die Anzahl der selektierten Zeilen kann dann dem Systemfeld sy-dbcnt entnommen werden. Falls mehr als 2.147.483.647 Zeilen selektiert werden, enthält sy-dbcnt den Wert -1. Wenn keine Daten auf der Datenbank gefunden wurden, wird sy-dbcnt auf 0 und sy-subrc auf 4 gesetzt.

Hinweise

  • Aggregatausdrücke können nicht zusammen mit der Angabe data_source~* in der kommaseparierten Liste aufgeführt werden.
  • Wenn Aggregatausdrücke als Operanden von SQL-Ausdrücken verwendet werden, gelten die gleichen Regeln, wie wenn sie direkt angegeben wären.
  • Die direkte Angabe einzelner Aggregatausdrücke war bereits vor der Einführung von SQL-Ausdrücken möglich und führt deshalb nicht zum strikten Modus der Syntaxprüfung, der ansonsten durch SQL-Ausdrücke bewirkt wird.

Beispiel

Bestimmung der Anzahl der Zeilen in der DDIC-Datenbanktabelle SCARR.

Alternative 5

... sql_win


Wirkung

Angabe eines Fensterausdrucks sql_win, in dem eine Fensterfunktion auf ein Fenster der Ergebnismenge angewendet wird. Fensterausdrücke können ausschließlich in der SELECT-Liste angegeben werden.










RFUMSV00 - Advance Return for Tax on Sales/Purchases   General Material Data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 15709 Date: 20240523 Time: 133425     sap01-206 ( 229 ms )