Ansicht
Dokumentation

ABENOPEN_SQL_EXAMPLES - OPEN SQL EXAMPLES

ABENOPEN_SQL_EXAMPLES - OPEN SQL EXAMPLES

Fill RESBD Structure from EBP Component Structure   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Open SQL - Beispiele zur Verwendung

Dieser Abschnitt enthält Beispiele, die zusätzlich zu den Beispielen, die bei der Beschreibung der Syntax unter Open SQL angegeben sind, in die Verwendung der Open-SQL-Anweisungen einführen sollen.

Zeilenangaben in der SELECT-Anweisung

SELECT SINGLE

Beispiel

Ausgabe der freien Sitzplätze des Lufthansa-Fluges 0400 28.02.2001.

DATA wa        TYPE sflight.
DATA seatsfree TYPE I.

SELECT SINGLE * FROM sflight INTO wa
       WHERE
         carrid   = 'LH '      AND
         connid   = '0400'     AND
         fldate   = '20010228'.

seatsfree = wa-seatsmax - wa-seatsocc.

WRITE: / wa-carrid, wa-connid, wa-fldate, seatsfree.

SELECT DISTINCT

Beispiel

Ausgabe aller Flugziele, die die Lufthansa von Frankfurt aus anfliegt.

DATA: target TYPE spfli-cityto.

SELECT DISTINCT cityto
       INTO target FROM spfli
       WHERE
         carrid   = 'LH '       AND
         cityfrom = 'FRANKFURT'.
  WRITE: / target.
ENDSELECT.

Beispiel

Ausgabe der Anzahl der Fluggesellschaften, die New York anfliegen:

DATA   count TYPE I.

SELECT COUNT( DISTINCT carrid )
       INTO count
       FROM spfli
       WHERE
         cityto = 'NEW YORK'.
WRITE: / count.

Beispiel

Ausgabe der Anzahl der Passagiere, des Gesamtgewichtes und des durchschnittlichen Gewichtes des Gepäcks aller Lufthansa-Flüge am 28.02.2001:

DATA:  count TYPE I, sum TYPE P DECIMALS 2, avg TYPE F,
       connid LIKE sbook-connid.

SELECT connid COUNT( * ) SUM( luggweight ) AVG( luggweight )
       INTO (connid, count, sum, avg)
       FROM sbook
       WHERE
         carrid   = 'LH '      AND
         fldate   = '20010228'
       GROUP BY connid.
  WRITE: / connid, count, sum, avg.
ENDSELECT.

Spaltenbezeichner in der SELECT-Anweisung

Angabe ohne Namen der Datenbank

Beispiel

Ausgabe einer Liste aller Kunden, deren Name mit 'A' anfängt.

DATA: WA_SCUSTOM TYPE SCUSTOM.

SELECT * FROM SCUSTOM INTO WA_SCUSTOM WHERE NAME LIKE 'A%'.
  WRITE: / WA_SCUSTOM-ID, WA_SCUSTOM-NAME.
ENDSELECT.

Angabe mit Namen der Datenbank

Beispiel

Ausgabe einer Liste aller Kunden, deren Name mit 'A' anfängt:

DATA: WA_SCUSTOM TYPE SCUSTOM.

SELECT * FROM SCUSTOM INTO WA_SCUSTOM
         WHERE SCUSTOM~NAME LIKE 'A%'.
  WRITE: / WA_SCUSTOM-ID, WA_SCUSTOM-NAME.
ENDSELECT.

Angabe mit Aliasnamen der Datenbank

Beispiel

Ausgabe einer Liste aller Kunden, deren Name mit 'A' anfängt:

DATA: WA_SCUSTOM TYPE SCUSTOM.

SELECT * FROM SCUSTOM AS T INTO WA_SCUSTOM WHERE T~NAME LIKE 'A%'.
  WRITE: / WA_SCUSTOM-ID, WA_SCUSTOM-NAME.
ENDSELECT.

Aggregatfunktion ohne Alternativname

Beispiel

Ausgabe einer Liste aller Kunden der Lufthansaflüge 0400 des Jahres 1995 mit dem jeweils höchsten Buchungspreis, geordnet nach dem Kundennamen.

DATA: SCUSTOM_WA TYPE SCUSTOM, SBOOK_WA TYPE SBOOK.

SELECT SCUSTOM~NAME SCUSTOM~POSTCODE SCUSTOM~CITY
         MAX( SBOOK~LOCCURAM )
       INTO (SCUSTOM_WA-NAME, SCUSTOM_WA-POSTCODE, SCUSTOM_WA-CITY,
             SBOOK_WA-LOCCURAM)
       FROM SCUSTOM INNER JOIN SBOOK
         ON SCUSTOM~ID = SBOOK~CUSTOMID
       WHERE SBOOK~FLDATE BETWEEN '19950101' AND '19951231' AND
             SBOOK~CARRID   = 'LH '                         AND
             SBOOK~CONNID   = '0400'
       GROUP BY SCUSTOM~NAME SCUSTOM~POSTCODE SCUSTOM~CITY
       ORDER BY SCUSTOM~NAME.
  WRITE: / SCUSTOM_WA-NAME, SCUSTOM_WA-POSTCODE, SCUSTOM_WA-CITY,
           SBOOK_WA-LOCCURAM.
ENDSELECT.

Aggregatfunktion mit Alternativname

Beispiel

Ausgabe einer Liste aller Kunden der Lufthansaflüge 0400 im Jahr 1995 mit dem jeweils durchschnittlichen Buchungspreis, geordnet nach Buchungspreis und Kundennamen:

DATA: SCUSTOM_WA TYPE SCUSTOM, SBOOK_WA TYPE SBOOK.

SELECT SCUSTOM~NAME SCUSTOM~POSTCODE SCUSTOM~CITY
         AVG( SBOOK~LOCCURAM ) AS AVG
       INTO (SCUSTOM_WA-NAME, SCUSTOM_WA-POSTCODE, SCUSTOM_WA-CITY,
             SBOOK_WA-LOCCURAM)
       FROM SCUSTOM INNER JOIN SBOOK
         ON SCUSTOM~ID = SBOOK~CUSTOMID
       WHERE SBOOK~FLDATE BETWEEN '19950101' AND '19951231' AND
             SBOOK~CARRID   = 'LH '                         AND
             SBOOK~CONNID   = '0400'
      GROUP BY SCUSTOM~NAME SCUSTOM~POSTCODE SCUSTOM~CITY
      ORDER BY AVG DESCENDING SCUSTOM~NAME.
  WRITE: / SCUSTOM_WA-NAME, SCUSTOM_WA-POSTCODE, SCUSTOM_WA-CITY,
           SBOOK_WA-LOCCURAM.
ENDSELECT.

Aggregatfunktion max

Beispiel

Ausgabe einer Liste aller Kunden der Lufthansaflüge 0400 des Jahres 2001 mit dem jeweils höchsten Buchungspreis, geordnet nach dem Kundennamen.

DATA: name     TYPE scustom-name,
      postcode TYPE scustom-postcode,
      city     TYPE scustom-city,
      max      TYPE sbook-loccuram.

SELECT scustom~name scustom~postcode scustom~city
         MAX( sbook~loccuram )
       INTO (name, postcode, city, max)
       FROM scustom INNER JOIN sbook
         ON scustom~id = sbook~customid
       WHERE sbook~fldate BETWEEN '20010101' AND '20011231' AND
             sbook~carrid   = 'LH '                         AND
             sbook~connid   = '0400'
       GROUP BY scustom~name scustom~postcode scustom~city
       ORDER BY scustom~name.
  WRITE: / name, postcode, city, max.
ENDSELECT.

Aggregatfunktion min

Beispiel

Ausgabe einer Liste aller Kunden der Lufthansaflüge 0400 im Jahr 2001 mit dem jeweils niedrigsten Buchungspreis, geordnet nach dem Kundennamen.

DATA: name     TYPE scustom-name,
      postcode TYPE scustom-postcode,
      city     TYPE scustom-city,
      min      TYPE sbook-loccuram.

SELECT scustom~name scustom~postcode scustom~city
         MIN( sbook~loccuram )
       INTO (name, postcode, city, min)
       FROM scustom INNER JOIN sbook
         ON scustom~id = sbook~customid
       WHERE sbook~fldate BETWEEN '20010101' AND '20011231' AND
             sbook~carrid   = 'LH '                         AND
             sbook~connid   = '0400'
       GROUP BY scustom~name scustom~postcode scustom~city
       ORDER BY scustom~name.
  WRITE: / name, postcode, city, min.
ENDSELECT.

Aggregatfunktion avg

Beispiel

Ausgabe einer Liste aller Kunden der Lufthansaflüge 0400 im Jahr 2001 mit dem jeweils durchschnittlichen Buchungspreis, geordnet nach dem Kundennamen.

DATA: name     TYPE scustom-name,
      postcode TYPE scustom-postcode,
      city     TYPE scustom-city,
      average  TYPE sbook-loccuram.

SELECT scustom~name scustom~postcode scustom~city
         AVG( sbook~loccuram ) AS avg
       INTO (name, postcode, city, average)
       FROM scustom INNER JOIN sbook
         ON scustom~id = sbook~customid
       WHERE sbook~fldate BETWEEN '20010101' AND '20011231' AND
             sbook~carrid   = 'LH '                         AND
             sbook~connid   = '0400'
       GROUP BY scustom~name scustom~postcode scustom~city
       ORDER BY avg DESCENDING scustom~name.
  WRITE: / name, postcode, city, average.
ENDSELECT.

Aggregatfunktion sum

Beispiel

Ausgabe einer Liste aller Kunden der Lufthansaflüge 0400 im Jahr 2001 mit der jeweiligen Summe der Buchungspreise, geordnet nach dem Kundennamen.

DATA: name     TYPE scustom-name,
      postcode TYPE scustom-postcode,
      city     TYPE scustom-city,
      sum      TYPE sbook-loccuram.

SELECT scustom~name scustom~postcode scustom~city
         SUM( sbook~loccuram )
       INTO (name, postcode, city, sum)
       FROM scustom INNER JOIN sbook
         ON scustom~id = sbook~customid
       WHERE sbook~fldate BETWEEN '20010101' AND '20011231' AND
             sbook~carrid   = 'LH '                         AND
             sbook~connid   = '0400'
       GROUP BY scustom~name scustom~postcode scustom~city
       ORDER BY scustom~name.
  WRITE: / name, postcode, city, sum.
ENDSELECT.

Aggregatfunktion count

Beispiel

Ausgabe einer Liste aller Kunden der Lufthansaflüge 0400 im Jahr 2001 mit der jeweiligen Anzahl unterschiedlicher Buchungspreise, geordnet nach dem Kundennamen.

DATA: name     TYPE scustom-name,
      postcode TYPE scustom-postcode,
      city     TYPE scustom-city,
      count    TYPE I.

SELECT scustom~name scustom~postcode scustom~city
         COUNT( DISTINCT sbook~loccuram )
       INTO (name, postcode, city, count)
       FROM scustom INNER JOIN sbook
         ON scustom~id = sbook~customid
       WHERE sbook~fldate BETWEEN '20010101' AND '20011231' AND
             sbook~carrid   = 'LH '                         AND
             sbook~connid   = '0400'
       GROUP BY scustom~name scustom~postcode scustom~city
       ORDER BY scustom~name.
  WRITE: / name, postcode, city, count.
ENDSELECT.

Aggregatfunktion count( * )

Beispiel

Ausgabe einer Liste aller Kunden der Lufthansaflüge 0400 im Jahr 2001 mit der jeweiligen Anzahl ihrer Buchungen, geordnet nach dem Kundennamen.

DATA: name     TYPE scustom-name,
      postcode TYPE scustom-postcode,
      city     TYPE scustom-city,
      count    TYPE I.

SELECT scustom~name scustom~postcode scustom~city COUNT( * )
       INTO (name, postcode, city, count)
       FROM scustom INNER JOIN sbook
         ON scustom~id = sbook~customid
       WHERE sbook~fldate BETWEEN '20010101' AND '20011231' AND
             sbook~carrid   = 'LH '                         AND
             sbook~connid   = '0400'
       GROUP BY scustom~name scustom~postcode scustom~city
       ORDER BY scustom~name.
  WRITE: / name, postcode, city, count.
ENDSELECT.

Dynamische Spaltenangabe

Beispiel

Ausgabe aller Flugrouten der Lufthansa.

DATA: wa   TYPE spfli,
      ftab TYPE TABLE OF STRING.

APPEND 'CITYFROM' TO ftab.
APPEND 'CITYTO'   TO ftab.

SELECT DISTINCT (ftab)
       FROM spfli
       INTO CORRESPONDING FIELDS OF wa
       WHERE
         carrid   = 'LH'.
  WRITE: / wa-cityfrom, wa-cityto.
ENDSELECT.

Datenbanktabellen in der SELECT-Anweisung

Mandantenangabe

Beispiel

Ausgabe einer Liste aller Kunden im Mandanten 3:

DATA: WA_SCUSTOM TYPE SCUSTOM.

SELECT * FROM SCUSTOM CLIENT SPECIFIED INTO WA_SCUSTOM
         WHERE MANDT = '003'.
  WRITE: / WA_SCUSTOM-ID, WA_SCUSTOM-NAME.
ENDSELECT.

Begrenzte Zeilenzahl

Beispiel

Ausgabe der Liste der 3 Geschäftskunden mit den höchsten Rabattsätzen:

DATA: WA_SCUSTOM TYPE SCUSTOM.

SELECT * FROM SCUSTOM INTO WA_SCUSTOM UP TO 3 ROWS

         WHERE CUSTTYPE = 'B'
         ORDER BY DISCOUNT DESCENDING.
  WRITE: / WA_SCUSTOM-ID, WA_SCUSTOM-NAME,
           WA_SCUSTOM-DISCOUNT.
ENDSELECT.

Inner Join

Beispiel

Inner Join zwischen Tabelle 1 und Tabelle 2, bei dem die Spalte D der beiden Tabellen in der Join-Bedingung gleichgesetzt wird:

Tabelle 1                    Tabelle 2
|----|----|----|----|        |----|----|----|----|----|
| A  | B  | C  | D  |        | D  | E  | F  | G  | H  |
|----|----|----|----|        |----|----|----|----|----|
| a1 | b1 | c1 | 1  |        | 1  | e1 | f1 | g1 | h1 |
| a2 | b2 | c2 | 1  |        | 3  | e2 | f2 | g2 | h2 |
| a3 | b3 | c3 | 2  |        | 4  | e3 | f3 | g3 | h3 |
| a4 | b4 | c4 | 3  |        |----|----|----|----|----|
|----|----|----|----|

                    \        /
                     \      /
                      \    /
                       \  /
                        \/
    Inner Join
    |----|----|----|----|----|----|----|----|----|
    | A  | B  | C  | D  | D  | E  | F  | G  | H  |
    |----|----|----|----|----|----|----|----|----|
    | a1 | b1 | c1 | 1  | 1  | e1 | f1 | g1 | h1 |
    | a2 | b2 | c2 | 1  | 1  | e1 | f1 | g1 | h1 |
    | a4 | b4 | c4 | 3  | 3  | e2 | f2 | g2 | h2 |
    |----|----|----|----|----|----|----|----|----|


Beispiel

Ausgabe einer Liste aller nicht ausgebuchten Flüge von Frankfurt nach New York zwischen dem 10. und 20. September 1997:

DATA: DATE   LIKE SFLIGHT-FLDATE,
      CARRID LIKE SFLIGHT-CARRID,
      CONNID LIKE SFLIGHT-CONNID.

SELECT F~CARRID F~CONNID F~FLDATE
    INTO (CARRID, CONNID, DATE)
    FROM SFLIGHT AS F INNER JOIN SPFLI AS P
           ON F~CARRID = P~CARRID AND
              F~CONNID = P~CONNID
    WHERE P~CITYFROM = 'FRANKFURT'
      AND P~CITYTO   = 'NEW YORK'
      AND F~FLDATE BETWEEN '19970910' AND '19970920'
      AND F~SEATSOCC < F~SEATSMAX.
  WRITE: / DATE, CARRID, CONNID.
ENDSELECT.

Beispiel

Ausgabe einer Liste aller nicht ausgebuchten Flüge von Frankfurt nach New York zwischen dem 10. und 20. September 1997:

DATA: DATE   LIKE SFLIGHT-FLDATE,
      CARRID LIKE SFLIGHT-CARRID,
      CONNID LIKE SFLIGHT-CONNID.

SELECT F~CARRID F~CONNID F~FLDATE
    INTO (CARRID, CONNID, DATE)
    FROM SFLIGHT AS F INNER JOIN SPFLI AS P
           ON F~CARRID = P~CARRID
    WHERE F~CONNID = P~CONNID
      AND P~CITYFROM = 'FRANKFURT'
      AND P~CITYTO   = 'NEW YORK'
      AND F~FLDATE BETWEEN '19970910' AND '19970920'
      AND F~SEATSOCC < F~SEATSMAX.
  WRITE: / DATE, CARRID, CONNID.
ENDSELECT.

Beispiel

Beispiel für einen JOIN mit mehr als zwei Tabellen: Selektiere alle Flüge von Frankfurt nach New York zwischen dem 10. und 20. September 1997 mit freien Plätzen und gib sie mit dem Namen der Fluggesellschaft aus.


DATA: BEGIN OF WA,
        FLIGHT TYPE SFLIGHT,
        PFLI   TYPE SPFLI,
        CARR   TYPE SCARR,
      END OF WA.

SELECT * INTO WA
    FROM ( SFLIGHT AS F INNER JOIN SPFLI AS P
             ON F~CARRID = P~CARRID AND
                F~CONNID = P~CONNID )
           INNER JOIN SCARR AS C
             ON F~CARRID = C~CARRID
    WHERE P~CITYFROM = 'FRANKFURT'
      AND P~CITYTO   = 'NEW YORK'
      AND F~FLDATE BETWEEN '19970910' AND '19970920'
      AND F~SEATSOCC < F~SEATSMAX.
  WRITE: / WA-CARR-CARRNAME, WA-FLIGHT-FLDATE, WA-FLIGHT-CARRID,
           WA-FLIGHT-CONNID.
ENDSELECT.

Outer Join

Beispiel

Left Outer Join zwischen Tabelle 1 und Tabelle 2, bei dem die Spalte D der beiden Tabellen in der Join-Bedingung gleichgesetzt wird:

Tabelle 1                    Tabelle 2
|----|----|----|----|        |----|----|----|----|----|
| A  | B  | C  | D  |        | D  | E  | F  | G  | H  |
|----|----|----|----|        |----|----|----|----|----|
| a1 | b1 | c1 | 1  |        | 1  | e1 | f1 | g1 | h1 |
| a2 | b2 | c2 | 1  |        | 3  | e2 | f2 | g2 | h2 |
| a3 | b3 | c3 | 2  |        | 4  | e3 | f3 | g3 | h3 |
| a4 | b4 | c4 | 3  |        |----|----|----|----|----|
|----|----|----|----|

                    \        /
                     \      /
                      \    /
                       \  /
                        \/
    Left Outer Join
    |----|----|----|----|----|----|----|----|----|
    | A  | B  | C  | D  | D  | E  | F  | G  | H  |
    |----|----|----|----|----|----|----|----|----|
    | a1 | b1 | c1 | 1  | 1  | e1 | f1 | g1 | h1 |
    | a2 | b2 | c2 | 1  | 1  | e1 | f1 | g1 | h1 |
    | a3 | b3 | c3 | 2  |NULL|NULL|NULL|NULL|NULL|
    | a4 | b4 | c4 | 3  | 3  | e2 | f2 | g2 | h2 |
    |----|----|----|----|----|----|----|----|----|


Beispiel

Ausgabe einer Liste aller Kunden mit ihren - soweit vorhanden - Flugbuchungen für den 15. Oktober 1997:

DATA: CUSTOMER TYPE SCUSTOM,
      BOOKING  TYPE SBOOK.

SELECT SCUSTOM~NAME SCUSTOM~POSTCODE SCUSTOM~CITY
       SBOOK~FLDATE SBOOK~CARRID SBOOK~CONNID SBOOK~BOOKID
       INTO (CUSTOMER-NAME, CUSTOMER-POSTCODE, CUSTOMER-CITY,
             BOOKING-FLDATE, BOOKING-CARRID, BOOKING-CONNID,
             BOOKING-BOOKID)
       FROM SCUSTOM LEFT OUTER JOIN SBOOK
         ON SCUSTOM~ID = SBOOK~CUSTOMID AND
            SBOOK~FLDATE = '19971015'
       ORDER BY SCUSTOM~NAME SBOOK~FLDATE.
  WRITE: / CUSTOMER-NAME, CUSTOMER-POSTCODE, CUSTOMER-CITY,
           BOOKING-FLDATE, BOOKING-CARRID, BOOKING-CONNID,
           BOOKING-BOOKID.
ENDSELECT.

Dynamische Angabe

Beispiel

Ausgabe einer Liste aller Kunden:

DATA  tabname TYPE c  LENGTH 10.
DATA: BEGIN OF wa,
        id   TYPE scustom-id,
        name TYPE scustom-name,
      END OF wa.

tabname = 'SCUSTOM'.
SELECT id name INTO CORRESPONDING FIELDS OF wa FROM (tabname).
  WRITE: / wa-id, wa-name.
ENDSELECT.

Beispiel

Ausgabe aller Flugverbindungen mit Namen der Flugesellschaft und Flugnummer, wobei ein Join dynamisch zur Laufzeit aufgebaut wird.

CONSTANTS: flight_tab_name TYPE c LENGTH 30 VALUE 'SPFLI'.

DATA: from_clause TYPE STRING.
DATA: BEGIN OF wa,
        name(20) TYPE C,
        connid   TYPE spfli-connid,
      END OF wa.

CONCATENATE flight_tab_name ' AS t1'
            ' JOIN scarr AS t2 ON t1~carrid = t2~carrid'
   INTO from_clause.

SELECT t1~connid t2~carrname AS name
    FROM (from_clause)
    INTO CORRESPONDING FIELDS OF wa.
  WRITE: / wa-name, wa-connid.
ENDSELECT.

Zielbereich in der SELECT-Anweisung

Arbeitsbereich angeben

Beispiel

Ausgabe einer Liste aller Fluggesellschaften (mit Kurzbezeichnung und Namen).

DATA: wa TYPE scarr.

SELECT * INTO WA FROM scarr.
  WRITE: / wa-carrid, wa-carrname.
ENDSELECT.

Beispiel

Ausgabe einer Liste aller Fluggesellschaften (mit Kurzbezeichnung und Namen).

DATA: BEGIN OF wa1,
        client   TYPE scarr-mandt,
        carrid   TYPE scarr-carrid,
        carrname TYPE scarr-carrname,
        url      TYPE scarr-url,
        rest(100),
      END OF wa1.

SELECT * INTO wa1 FROM SCARR.
  WRITE: / wa1-carrid, wa1-carrname.
ENDSELECT.

Beispiel

Ausgabe einer Liste aller Fluggesellschaften (mit Kurzbezeichnung und Namen).

DATA: BEGIN OF wa2,
        carrid   TYPE scarr-carrid,
        carrname TYPE scarr-carrname,
      END OF wa2.

SELECT carrid carrname
       INTO wa2
       FROM scarr.
  WRITE: / wa2-carrid, wa2-carrname.
ENDSELECT.

Einzelne Datenobjekte

Beispiel

Ausgabe einer Liste aller Fluggesellschaften (mit Kurzbezeichnung und Namen).

DATA: carrier TYPE scarr.
DATA: tabname TYPE c LENGTH 10.

tabname = 'SCARR'.

SELECT *
       INTO CORRESPONDING FIELDS OF carrier
       FROM (tabname).
  WRITE: / carrier-carrid, carrier-carrname.
ENDSELECT.

Interne Tabelle

Beispiel

Ausgabe einer Liste aller Fluggesellschaften (mit Kurzbezeichnung und Namen).

DATA:  ITAB TYPE STANDARD TABLE OF scarr WITH NON-UNIQUE
                 DEFAULT KEY INITIAL SIZE 100,
       wa_itab TYPE scarr.

SELECT * INTO TABLE itab FROM scarr.
LOOP AT itab INTO wa_itab.
  WRITE: / wa_itab-carrid, wa_itab-carrname.
ENDLOOP.

Beispiel

Ausgabe einer Liste aller Fluggesellschaften (mit Kurzbezeichnung und Namen):

DATA: itab TYPE STANDARD TABLE OF SCARR WITH NON-UNIQUE
                 DEFAULT KEY INITIAL SIZE 10.
FIELD-SYMBOLS: &lt;FS&gt; TYPE scarr.

SELECT * INTO TABLE itab PACKAGE SIZE 20 FROM scarr.
  LOOP AT itab ASSIGNING &lt;FS&gt;.
    WRITE: / &lt;FS&gt;-carrid, &lt;FS&gt;-carrname.
  ENDLOOP.
ENDSELECT.

WHERE-Bedingungen

Vergleichsoperatoren

Beispiele

Selektiere alle Flugverbindungen der Lufthansa:

DATA: WA_SPFLI TYPE SPFLI.

SELECT * FROM SPFLI INTO WA_SPFLI
    WHERE CARRID = 'LH'.
  WRITE: / WA_SPFLI-CITYFROM, WA_SPFLI-CITYTO.
ENDSELECT.

Selektiere alle Flüge, die nicht ausgebucht sind:

DATA: WA_SFLIGHT TYPE SFLIGHT.

SELECT * FROM SFLIGHT INTO WA_SFLIGHT
    WHERE SFLIGHT~SEATSOCC LT SFLIGHT~SEATSMAX.
  WRITE: / WA_SFLIGHT-CARRID, WA_SFLIGHT-CONNID,
           WA_SFLIGHT-FLDATE.
ENDSELECT.

Selektiere die Flüge mit den meisten Passagieren:

DATA: WA_SFLIGHT TYPE SFLIGHT.

SELECT * FROM SFLIGHT INTO WA_SFLIGHT
    WHERE SEATSOCC = ( SELECT MAX( SEATSOCC ) FROM SFLIGHT ).
    WRITE: / WA_SFLIGHT-CARRID, WA_SFLIGHT-CONNID,

             WA_SFLIGHT-FLDATE.
ENDSELECT.

Falsche Abfrage auf den Null-Wert

Beispiel

Keiner der folgenden Befehle findet eine Zeile, in der das Feld TELEPHONE den Wert NULL enthält:

DATA: WA_SCUSTOM TYPE SCUSTOM.

SELECT * FROM SCUSTOM INTO WA_SCUSTOM WHERE TELEPHONE = ' '.
ENDSELECT.
SELECT * FROM SCUSTOM INTO WA_SCUSTOM WHERE TELEPHONE &lt;&gt; ' '.
ENDSELECT.
SELECT * FROM SCUSTOM INTO WA_SCUSTOM WHERE NOT TELEPHONE = ' '.
ENDSELECT.

Intervall

Beispiel

Selektiere alle Passagierflugzeuge mit 200 bis 250 Sitzplätzen.

DATA: WA_SAPLANE TYPE SAPLANE,
      LOW  TYPE I VALUE 200,
      HIGH TYPE I VALUE 250.

SELECT * FROM SAPLANE INTO WA_SAPLANE
    WHERE SEATSMAX BETWEEN LOW AND HIGH.
  WRITE: / WA_SAPLANE-PLANETYPE.
ENDSELECT.

Zeichenfolgen

Beispiele

Selektiere alle Kunden, deren Name mit 'M' beginnt:

DATA SCUSTOM_WA TYPE SCUSTOM.

SELECT ID NAME FROM SCUSTOM
    INTO CORRESPONDING FIELDS OF SCUSTOM_WA
    WHERE NAME LIKE 'M%'.
  WRITE: / SCUSTOM_WA-ID, SCUSTOM_WA-NAME.
ENDSELECT.

Selektiere alle Kunden, deren Name 'huber' enthält:

DATA SCUSTOM_WA TYPE SCUSTOM.

SELECT ID NAME FROM SCUSTOM
    INTO CORRESPONDING FIELDS OF SCUSTOM_WA
    WHERE NAME LIKE '%huber%'.
  WRITE: / SCUSTOM_WA-ID, SCUSTOM_WA-NAME.
ENDSELECT.

Selektiere alle Kunden, deren Name als zweiten Buchstaben kein 'n' enthält:

DATA SCUSTOM_WA TYPE SCUSTOM.

SELECT ID NAME FROM SCUSTOM
    INTO CORRESPONDING FIELDS OF SCUSTOM_WA
    WHERE NAME NOT LIKE '_n%'.
  WRITE: / SCUSTOM_WA-ID, SCUSTOM_WA-NAME.
ENDSELECT.

Beispiel

Selektiere alle Kunden, deren Name mit '100%' beginnt:

DATA SCUSTOM_WA TYPE SCUSTOM.

SELECT ID NAME FROM SCUSTOM
    INTO CORRESPONDING FIELDS OF SCUSTOM_WA
    WHERE NAME LIKE '100#%' ESCAPE '#'.
  WRITE: / SCUSTOM_WA-ID, SCUSTOM_WA-NAME.
ENDSELECT.

Werteliste

Beispiel

Selektiere alle Flugziele, die American Airlines, Lufthansa oder Singapore Airlines von Frankfurt aus anfliegen:

DATA   TARGET LIKE SPFLI-CITYTO.

SELECT DISTINCT CITYTO
    INTO TARGET FROM SPFLI
    WHERE CARRID   IN ('AA', 'LH', 'SQ') AND
          CITYFROM = 'FRANKFURT'.
  WRITE: / TARGET.
ENDSELECT.

Subquery

Beispiel

Selektiere die Flüge mit den meisten Passagieren:

DATA: WA_SFLIGHT TYPE SFLIGHT.

SELECT * FROM SFLIGHT INTO WA_SFLIGHT
    WHERE SEATSOCC IN ( SELECT MAX( SEATSOCC ) FROM SFLIGHT ).
  WRITE: / WA_SFLIGHT-CARRID, WA_SFLIGHT-CONNID,
           WA_SFLIGHT-FLDATE.
ENDSELECT.

Beispiel

Selektiere die Flüge, für die es mindestens eine Buchung gibt:

DATA: WA_SFLIGHT TYPE SFLIGHT.

SELECT * FROM SFLIGHT AS F INTO WA_SFLIGHT
   WHERE EXISTS ( SELECT * FROM SBOOK
                     WHERE CARRID = F~CARRID
                       AND CONNID = F~CONNID
                       AND FLDATE = F~FLDATE ).
  WRITE: / WA_SFLIGHT-CARRID, WA_SFLIGHT-CONNID,
           WA_SFLIGHT-FLDATE.
ENDSELECT.

Beispiel

Selektiere alle noch nicht ausgebuchten Flüge von Frankfurt nach New York zwischen dem 1.1.1999 und dem 31.3.1999:

DATA: WA_SFLIGHT TYPE SFLIGHT.

SELECT * FROM SFLIGHT AS F INTO WA_SFLIGHT
    WHERE SEATSOCC < F~SEATSMAX
      AND EXISTS ( SELECT * FROM SPFLI
                     WHERE CARRID = F~CARRID
                       AND CONNID = F~CONNID
                       AND CITYFROM = 'FRANKFURT'
                       AND CITYTO = 'NEW YORK' )
      AND FLDATE BETWEEN '19990101' AND '19990331'.
  WRITE: / WA_SFLIGHT-CARRID, WA_SFLIGHT-CONNID,
           WA_SFLIGHT-FLDATE.
ENDSELECT.

Beispiel

Dieses Beispiel illustriert die Verwendung von ALL. Es wird eine Liste mit den Kundennummern der Kunden (bzw. des Kunden) ausgegeben, die die meisten Buchungen gemacht haben.

DATA: ID TYPE SBOOK-CUSTOMID, CNT TYPE I.

SELECT CUSTOMID COUNT( * ) AS C FROM SBOOK
    INTO (ID, CNT)
    GROUP BY CUSTOMID
    HAVING COUNT( * ) >=
      ALL ( SELECT COUNT( * ) FROM SBOOK GROUP BY CUSTOMID ).
  WRITE: / ID, CNT.
ENDSELECT.

Selektionstabelle

Beispiel

Selektiere die Kundennummern

  • '10000000' bis '19999999',
  • '01104711' sowie
  • alle Kundennummern größer gleich '90000000',


nicht aber die Kundennummern

  • '10000810' bis '10000815',
  • '10000911' sowie
  • alle Kundennummern, die an der fünften Stelle eine '5' haben:


DATA: WA_SCUSTOM TYPE SCUSTOM.

SELECT-OPTIONS: R FOR WA_SCUSTOM-ID.
* RANGES:       R FOR WA_SCUSTOM-ID.

* R sei wie folgt gefüllt (die Reihenfolge der
* Zeilen ist ohne Bedeutung):
*
* SIGN  OPTION  LOW       HIGH
* --------------------------------
* I     EQ      01104711
* I     BT      10000000  19999999
* I     GE      90000000
* E     EQ      10000911
* E     BT      10000810  10000815
* E     CP      ++++5*
*
* Daraus wird die Bedingung
*
* ( ID = '01104711'                        OR
*   ID BETWEEN '10000000' AND '19999999'   OR
*   ID >= '90000000' )                       AND
* ID &lt;&gt; '10000911'                           AND
* ID NOT BETWEEN '10000810' AND '10000815'   AND
* ID NOT LIKE '____5%'
*
* generiert.

SELECT * FROM SCUSTOM INTO WA_SCUSTOM WHERE ID IN R.
  ...
ENDSELECT.

Null-Wert

Beispiel

Selektiere alle Kunden, für die keine Telefonnummer angegeben ist.

DATA: WA_SCUSTOM TYPE SCUSTOM.

SELECT * FROM SCUSTOM INTO WA_SCUSTOM WHERE TELEPHONE IS NULL.
ENDSELECT.

NOT

Beispiel

Selektiere die Kunden mit Kundennummern, die nicht im Postleitzahlbereich 68 wohnen:

... WHERE  NOT POSTCODE LIKE '68%'

AND

Beispiel

Selektiere die Kunden mit Kundennummern, die kleiner als '01000000' sind und die nicht im Postleitzahlbereich 68 wohnen:

... WHERE ID < '01000000'
          AND NOT
          POSTCODE LIKE '68%'

OR

Beispiele

Selektiere die Kunden mit Kundennummern, die kleiner als '01000000' oder größer als '02000000' sind:

... WHERE ID < '01000000' OR
          ID > '02000000'.


Selektiere die Kunden mit Kundennummern, die kleiner als '01000000' oder größer als '02000000' sind und die nicht in den Postleitzahlbereichen 68 oder 69 wohnen:

... WHERE ( ID < '01000000' OR ID > '02000000' )
          AND NOT
          ( POSTCODE LIKE '68%' OR POSTCODE LIKE '69%' )

FOR ALL ENTRIES

Beispiel

Anzeige der freien Plätze von Flügen am 28.02.2001.

TYPES: BEGIN OF ftab_type,
         carrid TYPE sflight-carrid,
         connid TYPE sflight-connid,
       END OF ftab_type.

DATA:  ftab TYPE STANDARD TABLE OF ftab_type WITH
                 NON-UNIQUE DEFAULT KEY INITIAL SIZE 10,
       free TYPE I,
       wa_sflight TYPE sflight.

* ftab sei wie folgt gefüllt:
*
* CARRID  CONNID
* --------------
* LH      2415
* SQ      0026
* LH      0400

SELECT * FROM sflight INTO wa_sflight
    FOR ALL ENTRIES IN ftab
    WHERE CARRID = ftab-carrid AND
          CONNID = ftab-connid AND
          fldate = '20010228'.
  free = wa_sflight-seatsocc - wa_sflight-seatsmax.
  WRITE: / wa_sflight-carrid, wa_sflight-connid, free.
ENDSELECT.

* Der Befehl wirkt dann wie:

SELECT DISTINCT * FROM sflight INTO wa_sflight
    WHERE ( carrid = 'LH'   AND
            connid = '2415' AND
            fldate = '20010228' ) OR
          ( carrid = 'SQ'   AND
            connid = '0026' AND
            fldate = '20010228' ) OR
          ( carrid = 'LH'   AND
            connid = '0400' AND
            fldate = '20010228' ).
  free = wa_sflight-seatsocc - wa_sflight-seatsmax.
  WRITE: / wa_sflight-carrid, wa_sflight-connid, free.
ENDSELECT.

Dynamische Bedingung

Beispiel

Ausgabe aller Flüge an einem bestimmten Datum, nach Eingabe des Datums und der Fluggesellschaft.

PARAMETERS: airline TYPE C LENGTH 2,
            date    TYPE D.
DATA: where_clause TYPE STRING,
      connid       TYPE sflight-connid.

CONCATENATE     'carrid = ''' airline ''''
            ' AND fldate = ''' date '''' INTO where_clause.

SELECT connid FROM sflight INTO connid
  WHERE (where_clause).
  WRITE: / date, airline, connid.
ENDSELECT.

Zeilen gruppieren in der SELECT-Anweisung

Statische Angabe

Beispiel

Ausgabe der Anzahl der Passagiere, des Gesamtgewichtes und des durchschnittlichen Gewichtes des Gepäcks aller Lufthansa-Flüge am 28.02.2001.

DATA:  count TYPE I, sum TYPE P LENGTH 8 DECIMALS 2, avg TYPE F.
DATA:  connid TYPE sbook-connid.

SELECT connid COUNT( * ) SUM( luggweight ) AVG( luggweight )
       INTO (connid, count, sum, avg)
       FROM sbook
       WHERE
         carrid   = 'LH'       AND
         fldate   = '20010228'
       GROUP BY connid.
  WRITE: / connid, count, sum, avg.
ENDSELECT.

Dynamische Angabe

Beispiel

Ausgabe aller Abflugorte der Lufthansa mit Anzahl der Ziele.

DATA:   BEGIN OF wa.
          INCLUDE STRUCTURE spfli.
DATA:     count TYPE I.
DATA:   END OF wa.
DATA:   field_list    TYPE STRING,
        group_by_list TYPE STRING,
        count         TYPE I.

field_list    = 'CITYFROM COUNT( * ) AS COUNT'.
group_by_list = 'CITYFROM'.

SELECT DISTINCT (field_list)
       INTO CORRESPONDING FIELDS OF wa
       FROM spfli
       WHERE
         carrid   = 'LH'
       GROUP BY (group_by_list).
  WRITE: / wa-cityfrom, wa-count.
ENDSELECT.

Gruppierte Zeilen einschränken in der SELECT-Anweisung

Statische Angabe

Beispiel

Ausgabe der Anzahl der Passagiere und des durchschnittlichen Gewichtes des Gepäcks aller Lufthansa-Flüge am 28.02.2001, bei denen das Durchschnittsgewicht des Gepäcks mehr als 20 kg betrug.

DATA:  count  TYPE I,

       avg    TYPE F,
       connid TYPE sbook-connid.

SELECT CONNID COUNT( * ) avg( LUGGWEIGHT )
       INTO (connid, count, avg)
       FROM sbook
       WHERE
         carrid   = 'LH'       AND
         fldate   = '20010228'
       GROUP BY connid
       HAVING AVG( luggweight ) > '20.0'.
  WRITE: / connid, count, avg.
ENDSELECT.

Dynamische Angabe

Beispiel

Nach Zuweisung von 'cityfrom' und 'sbook' an die Parameter comp bzw. tabname werden alle Abflugorte mit mehr als 3 Flugzielen ausgegeben.

PARAMETERS: comp    TYPE C LENGTH 80,
            tabname TYPE C LENGTH 80.
DATA:   dref      TYPE REF TO DATA,
        long_name TYPE STRING,
        count     TYPE I,
        fieldlist TYPE STRING,
        condition TYPE STRING.
FIELD-SYMBOLS: &lt;fs&gt;.

CONCATENATE tabname '-' comp INTO long_name.
CREATE DATA dref TYPE (long_name).
ASSIGN dref->* TO &lt;fs&gt;.

CONCATENATE comp ' count(*)' INTO fieldlist.
condition = 'count(*) > 3'.

SELECT DISTINCT (fieldlist)
       INTO (&lt;fs&gt;, count)
       FROM (tabname)
       GROUP BY (comp)
       HAVING (condition).
  WRITE: / &lt;fs&gt;, count.
ENDSELECT.

Zeilen sortieren in der SELECT-Anweisung

Sortierung nach Primärschlüssel

Beispiel

Ausgabe der Passagierliste des Lufthansa-Fluges 0400 am 28.02.2001.

DATA: wa_sbook TYPE sbook.

SELECT * FROM sbook INTO wa_sbook
         WHERE
           carrid   = 'LH '      AND
           connid   = '0400'     AND
           fldate   = '20010228'
         ORDER BY PRIMARY KEY.
  WRITE: / wa_sbook-bookid,     wa_sbook-customid,
           wa_sbook-custtype,   wa_sbook-smoker,
           wa_sbook-luggweight, wa_sbook-wunit,
           wa_sbook-invoice.
ENDSELECT.

Statische Spaltenangabe

Beispiel

Ausgabe der Lufthansa-Flüge vom 27.02.2001 bis 05.03.2001, sortiert nach Flugzeugtyp und Anzahl der belegten Plätze.

DATA: wa_sflight TYPE sflight.

SELECT * FROM sflight INTO wa_sflight
         WHERE carrid = 'LH' AND
               fldate BETWEEN '20010227' AND '20010305'
         ORDER BY planetype ASCENDING seatsocc DESCENDING.
  WRITE: / wa_sflight-planetype, wa_sflight-seatsocc,
           wa_sflight-connid, wa_sflight-fldate.
ENDSELECT.

Dynamische Spaltenangabe

Beispiel

Nach Eingabe von 'cityfrom' bzw. 'cityto' werden alle Abflugorte bzw. Zielorte der Lufthansa mit Anzahl der Ziele ausgegeben.

PARAMETERS: comp(80).
DATA:   dref TYPE REF TO DATA,
        long_name TYPE STRING,
        name TYPE STRING,
        ftab TYPE TABLE OF STRING,
        count TYPE I.
FIELD-SYMBOLS: &lt;fs&gt;.

name = 'SPFLI'.
CONCATENATE name '-' comp INTO long_name.
CREATE DATA dref TYPE (long_name).
ASSIGN dref->* TO &lt;fs&gt;.

APPEND comp TO ftab.
APPEND 'COUNT( * ) AS COUNT' TO ftab.

SELECT DISTINCT (ftab)
       INTO (&lt;fs&gt;, count)
       FROM (name)
       WHERE
         carrid   = 'LH'
       GROUP BY (comp)
       ORDER BY (comp).

  WRITE: / &lt;fs&gt;, count.
ENDSELECT.

Explizite Cursor-Behandlung

Cursor öffnen

Beispiel

Öffnen des Datenbank-Cursors C1 auf der Datenbanktabelle SFLIGHT für eine SELECT-Anweisung.

DATA: C1 TYPE CURSOR.

OPEN CURSOR C1 FOR
     SELECT * FROM SFLIGHT WHERE CARRID = 'LH '.

Ergebnismenge lesen

Beispiel

Ausgabe der Passagierliste des Lufthansa-Fluges 0400 am 28.02.2001.

DATA:   c  TYPE CURSOR,
        wa TYPE sbook.

OPEN CURSOR c FOR SELECT * FROM sbook
  WHERE
    carrid   = 'LH '      AND
    connid   = '0400'     AND
    fldate   = '20010228'
  ORDER BY PRIMARY KEY.

DO.
  FETCH NEXT CURSOR c INTO wa.
  IF SY-SUBRC &lt;&gt; 0.
    CLOSE CURSOR C. EXIT.
  ENDIF.
  WRITE: / wa-bookid, wa-customid,   wa-custtype,
           wa-smoker, wa-luggweight, wa-wunit,
           wa-invoice.
ENDDO.

CLOSE CURSOR c.

Zeilen einfügen mit INSERT

Automatische Mandantenbehandlung

Beispiel

Hinzufügen des Kunden Robinson im aktuellen Mandanten.

DATA: wa TYPE scustom.
wa-id        = '12400177'.
wa-name      = 'Robinson'.
wa-postcode  = '69542'.
wa-city      = 'Heidelberg'.
wa-custtype  = 'P'.
wa-discount  = '003'.
wa-telephone = '06201/44889'.

INSERT INTO scustom VALUES wa.

Explizite Angabe des Mandanten

Beispiel

Hinzufügen des Kunden Robinson im Mandanten 2.

DATA: wa TYPE scustom.
wa-mandt     = '002'.
wa-id        = '12400177'.
wa-name      = 'Robinson'.
wa-postcode  = '69542'.
wa-city      = 'Heidelberg'.
wa-custtype  = 'P'.
wa-discount  = '003'.
wa-telephone = '06201/44889'.

INSERT scustom CLIENT SPECIFIED FROM wa.

Zeilen ändern mit UPDATE

Angabe von Spalten

Beispiel

Ändern des Rabatts aller Kunden (im aktuellen Mandanten) auf 3 Prozent.

UPDATE scustom SET discount = '003'.

Beispiel

Das gleiche Beispiel unter Verwendung einer dynamischen SET-Bedingung:

DATA: tabname     TYPE STRING,
      set_clause  TYPE STRING.

tabname    = 'SCUSTOM'.
set_clause = 'DISCOUNT = ''003'' '.

UPDATE (tabname) SET (set_clause).

Beispiel

Die Doppelpunkt-Komma-Logik sollte nicht verwendet werden, da eine falsche Verwendung zum ungewollten Ändern einer ganzen Datenbanktabelle führen kann. Bei folgendem Code-Fragment stellt nicht eine einzelne Anweisung dar, die den Rabatt und die Telefonnummer des Kunden mit der Kundennummer '00017777' aktualisiert. Stattdessen handelt es sich um zwei Anweisungen, wobei die erste den Rabatt für alle Kunden und die zweite die Telefonnummer des Kunden mit der Kundennummer '00017777' ändert.

* FALSCH * WRONG * FALSCH * WRONG * FALSCH * WRONG *
* UPDATE SCUSTOM SET:  DISCOUNT  = '003',
*                      TELEPHONE = '0621/444444'
*                WHERE ID        = '00017777'.

WHERE-Bedingung

Beispiel

Erhöhen der belegten Plätze des Lufthansafluges 0400 am 28.02.2001 (im aktuellen Mandanten) um 3 Plätze.

UPDATE sflight SET   seatsocc = seatsocc + 3
               WHERE carrid   = 'LH'   AND
                     connid   = '0400' AND
                     fldate   = '20010228'.

WHERE-Bedingung mit Mandantenangabe

Beispiel

Erhöhen der belegten Plätze des Lufthansafluges 0400 am 28.02.2001 im Mandanten 2 um 3 Plätze:

UPDATE sflight CLIENT SPECIFIED
               SET   seatsocc = seatsocc + 3
               WHERE mandt    = '002'  AND
                     carrid   = 'LH'   AND
                     connid   = '0400' AND
                     fldate   = '20010228'.

Angabe eines Arbeitsbereichs

Beispiel

Ändern der Telefonnummer des Kunden mit der Kundennummer '12400177' im aktuellen Mandanten.

DATA   wa TYPE scustom.

SELECT SINGLE * FROM scustom INTO wa
  WHERE id = '12400177'.

wa-telephone = '06201/44889'.
UPDATE scustom FROM wa.

Beispiel

Ändern des Rabatts des Kunden mit der Kundennummer '00017777' (im aktuellen Mandanten) auf 3 Prozent.

DATA: wa TYPE scustom.

SELECT SINGLE * FROM scustom INTO wa
  WHERE id = '00017777'.

wa-discount = '003'.
UPDATE scustom FROM wa.

Zeilen einfügen oder ändern mit MODIFY

Beispiel

Hinzufügen oder Ändern der Daten des Kunden Robinson im aktuellen Mandanten:

DATA: wa TYPE scustom.
wa-id        = '12400177'.
wa-name      = 'Robinson'.
wa-postcode  = '69542'.
wa-city      = 'Heidelberg'.
wa-custtype  = 'P'.
wa-discount  = '003'.
wa-telephone = '06201/44889'.

MODIFY scustom FROM wa.

Zeilen löschen mit DELETE

Löschen aller Zeilen

Beispiel

Löschen aller Flugbuchungen (im aktuellen Mandanten).

DELETE FROM SBOOK.

Angabe einer WHERE-Bedingung

Beispiel

Löschen aller Buchungen des Lufthansafluges 0400 am 28.02.1995 (im aktuellen Mandanten):

DELETE FROM SBOOK WHERE CARRID = 'LH'       AND
                        CONNID = '0400'     AND
                        FLDATE = '19950228'.

Angabe eines Arbeitsbereichs

Beispiel

Löschen der Buchung mit der Buchungsnummer 3 des Lufthansafluges 0400 am 28.02.2001 (im aktuellen Mandanten).

DATA wa TYPE sbook.
wa-carrid = 'LH'.
wa-connid = '0400'.
wa-fldate = '20010228'.
wa-bookid = '00000003'.

DELETE sbook FROM wa.

Dynamischer Quelltext

Quelltext in einem Textfeld.

Beispiel

Löschen aller Zeilen in einer Datenbanktabelle.

PARAMETERS tabname(80) TYPE c.

DELETE FROM (tabname).

Quelltext in einem String.

Beispiel

Anzeige der Flugverbindungen nach Eingabe von Start- und Zielflughafen.

PARAMETERS: p_from TYPE SPFLI-CITYFROM, p_to TYPE SPFLI-CITYTO.

DATA: where_clause TYPE STRING,
      carr         TYPE spfli-carrid,
      conn         TYPE spfli-connid.

CONCATENATE 'CITYFROM = ''' p_from ''' AND CITYTO = ''' p_to ''''
  INTO where_clause.

SELECT carrid connid FROM spfli
  INTO (carr, conn)
  WHERE (where_clause).
  WRITE: / carr, conn.
ENDSELECT.

Quelltext in einer internen Tabelle mit Textfeldern

Beispiel

Ausgabe der Anzahl der Flugbuchungen nach Eingabe von Fluggesellschaft, Flugnummer und Flugtag.

PARAMETERS: p_carrid TYPE sbook-carrid,
            p_connid TYPE sbook-connid,
            p_fldate TYPE sbook-fldate.

TYPES:      t_src(80) TYPE C.

DATA: where_tab TYPE TABLE OF t_src, line TYPE t_src.

CONCATENATE 'CARRID = ''' p_carrid '''' INTO line.
APPEND line TO where_tab.
APPEND 'AND' TO where_tab.
CONCATENATE 'CONNID = ''' p_connid '''' INTO line.
APPEND line TO where_tab.
APPEND 'AND' TO where_tab.
CONCATENATE 'FLDATE = ''' p_fldate '''' INTO line.
APPEND line TO where_tab.

SELECT count(*) FROM sbook WHERE (where_tab).

WRITE: / sy-dbcnt.

Quelltext in einer internen Tabelle mit Strings

Beispiel

Ausgabe der Flugdaten aller Flüge mit freien Plätzen (nach Eingabe von Fluggesellschaft und -nummer).

PARAMETERS: p_carrid TYPE sflight-carrid,
            p_connid TYPE sflight-connid.

DATA: s         TYPE STRING,
      stringtab TYPE TABLE OF STRING,
      date      TYPE sflight-fldate.

CONCATENATE ' CARRID = ''' p_carrid ''' AND' INTO s.
APPEND s TO stringtab.
CONCATENATE ' CONNID = ''' p_connid '''' INTO s.
APPEND s TO stringtab.

SELECT fldate FROM sflight INTO date
  WHERE (stringtab) AND seatsocc < sflight~seatsmax.
  WRITE : / date.
ENDSELECT.

Beispiel

Ausgabe einer Liste aller Fluggesellschaften (mit Kurzbezeichnung und Namen).

DATA:  carrid   TYPE scarr-carrid,
       carrname TYPE scarr-carrname.

SELECT carrid carrname
       INTO (carrid, carrname)
       FROM scarr.
  WRITE: / carrid, carrname.
ENDSELECT.

Dynamische logische Bedingung

Beispiel

Anzeige von Flugverbindungen nach Eingabe von Fluggesellschaft und Flugnummer.


PARAMETERS: carr_id TYPE spfli-carrid,
            conn_id TYPE spfli-connid.

DATA:       where_clause TYPE  STRING,
            and          TYPE C LENGTH 4,
            wa_spfli     TYPE spfli.

IF carr_id IS NOT INITIAL.
  CONCATENATE 'CARRID = ''' carr_id '''' INTO where_clause.
  and = ' AND'.
ENDIF.
IF conn_id IS NOT INITIAL.
  CONCATENATE where_clause and ' CONNID = ''' conn_id ''''
    INTO where_clause.
ENDIF.

SELECT * FROM spfli INTO wa_spfli WHERE (where_clause).
  WRITE: / wa_spfli-carrid, wa_spfli-connid, wa_spfli-cityfrom,
           wa_spfli-cityto, wa_spfli-deptime.
ENDSELECT.






Vendor Master (General Section)   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 73968 Date: 20240523 Time: 111003     sap01-206 ( 314 ms )