ABAP - Schlüsselwortdokumentation →  ABAP - Referenz →  Externe Daten verarbeiten →  ABAP-Datenbankzugriffe →  Open SQL →  Open SQL - Lesende Zugriffe →  SELECT →  SELECT - WHERE → 

Kurzreferenz

WHERE - FOR ALL ENTRIES

Syntax

... FOR ALL ENTRIES IN itab WHERE ... col operator itab-comp ...

Wirkung

Wenn vor dem Sprachelement WHERE der Anweisung SELECT der Zusatz FOR ALL ENTRIES angegeben ist, können die Komponenten comp der dort angegebenen internen Tabelle itab innerhalb von sql_cond auf der linken Seite von Vergleichen einer Spalte col mit Vergleichsoperatoren verwendet werden. Die angegebene Komponente comp muss zur Spalte col kompatibel sein. Die interne Tabelle itab kann einen strukturierten oder einen elementaren Zeilentyp haben. Bei elementarem Zeilentyp ist für comp die Pseudokomponente table_line anzugeben. Dem Namen der internen Tabelle soll wie allen Hostvariablen das Fluchtsymbol @ vorangestellt werden.

Der gesamte logische Ausdruck sql_cond wird für jede einzelne Zeile der internen Tabelle itab ausgewertet. Die Ergebnismenge der SELECT-Anweisung ist die Vereinigungsmenge der Ergebnismengen, die sich aus den einzelnen Auswertungen ergeben. Doppelt vorkommende Zeilen werden automatisch aus der Ergebnismenge entfernt. Wenn die interne Tabelle itab leer ist, wird die gesamte WHERE-Bedingung ignoriert und es werden alle Zeilen von der Datenbank in die Ergebnismenge gestellt.

Der logische Ausdruck sql_cond der WHERE-Bedingung kann über AND und OR aus verschiedenen logischen Ausdrücken zusammengesetzt sein. Wenn FOR ALL ENTRIES angegeben ist, muss es aber mindestens einen Vergleich mit einer Spalte der internen Tabelle itab geben, der statisch oder dynamisch angegeben werden kann.

Bei Verwendung des Zusatzes FOR ALL ENTRIES gelten folgende Einschränkungen im Zusammenspiel mit anderen Zusätzen:

Hinweise

In allen anderen Fällen wird die SAP-Pufferung verwendet und der Zusatz FOR ALL ENTRIES kann eine performantere Alternative für Join-Ausdrücke darstellen.

Beispiel

Auslesen von Flugdaten für eine vorgegebene Abflugstadt. Die entsprechenden Fluggesellschaften und Flugnummern werden zuerst in eine interne Tabelle entry_tab gestellt, die in der WHERE-Bedingung der folgenden SELECT-Anweisung ausgewertet wird. Diese Selektion könnte mit einem Join in der FROM-Klausel auch in einer einzigen SELECT-Anweisung erfolgen. Beachten sie, dass vor der Ausführung der SELECT-Anweisung mit FOR ALL ENTRIES sichergestellt wird, dass die Tabelle entry_tab nicht initial ist.

DATA p_city TYPE spfli-cityfrom.
cl_demo_input=>request( CHANGING field = p_city ).

TYPES: BEGIN OF entry_tab_type,
         carrid TYPE spfli-carrid,
         connid TYPE spfli-connid,
       END OF entry_tab_type.

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

DATA: entry_tab  TYPE TABLE OF entry_tab_type,
      result_tab TYPE SORTED TABLE OF result_tab_type
                      WITH UNIQUE KEY carrid connid fldate.

SELECT carrid, connid
       FROM spfli
       WHERE cityfrom = @( to_upper( p_city ) )
       INTO CORRESPONDING FIELDS OF TABLE @entry_tab.

IF entry_tab IS NOT INITIAL.
  SELECT carrid, connid, fldate
         FROM sflight
         FOR ALL ENTRIES IN @entry_tab
         WHERE carrid = @entry_tab-carrid AND
               connid = @entry_tab-connid
         ORDER BY PRIMARY KEY
         INTO CORRESPONDING FIELDS OF TABLE @result_tab.
  cl_demo_output=>display( result_tab ).
ENDIF.