Ansicht
Dokumentation

ABAPSELECT_CLAUSE_COLS - SELECT CLAUSE COLS

ABAPSELECT_CLAUSE_COLS - SELECT CLAUSE COLS

General Material Data   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

SELECT - select_list

Kurzreferenz



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

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 )