SAP NetWeaver AS ABAP Release 750, ©Copyright 2016 SAP AG. Alle Rechte vorbehalten.
ABAP - Schlüsselwortdokumentation → ABAP - Referenz → Externe Daten verarbeiten → ABAP-Datenbankzugriffe → Open SQL → Open SQL - Lesende Zugriffe → OPEN CURSOR →Daten über Cursor lesen
Das Beispiel demonstriert wie Daten über den Cursor gelesen werden können.
Quelltext
REPORT demo_select_cursor.
DATA: wa_spfli TYPE spfli,
wa_sflight TYPE sflight,
wa_sflight_back TYPE sflight.
DATA: c1 TYPE cursor,
c2 TYPE cursor.
OPEN CURSOR @c1 FOR
SELECT *
FROM spfli
ORDER BY PRIMARY KEY.
OPEN CURSOR @c2 FOR
SELECT *
FROM sflight
ORDER BY PRIMARY KEY.
DATA(out) = cl_demo_output=>new( ).
DO.
FETCH NEXT CURSOR @c1 INTO @wa_spfli.
IF sy-subrc NE 0.
EXIT.
ENDIF.
out->begin_section(
|{ wa_spfli-carrid } { wa_spfli-connid }| ).
DO.
IF NOT wa_sflight_back IS INITIAL.
wa_sflight = wa_sflight_back.
CLEAR wa_sflight_back.
ELSE.
FETCH NEXT CURSOR @c2 INTO @wa_sflight.
IF sy-subrc <> 0.
EXIT.
ELSEIF wa_sflight-carrid <> wa_spfli-carrid
OR wa_sflight-connid <> wa_spfli-connid.
wa_sflight_back = wa_sflight.
EXIT.
ENDIF.
ENDIF.
out->write(
|{ wa_sflight-carrid } {
wa_sflight-connid } {
wa_sflight-fldate }| ).
ENDDO.
out->end_section( ).
ENDDO.
CLOSE CURSOR: @c1, @c2.
out->display( ).
Beschreibung
Es werden zwei Cursor für die Tabellen SPFLI und SFLIGHT geöffnet. Da beide Tabellen über eine Fremdschlüsselbeziehung miteinander verknüpft sind, kann durch die Sortierung der Selektion nach dem Primärschlüssel eine geschachtelte Schleife über die Tabellen programmiert werden, wobei die Daten der inneren Schleife in Abhängigkeit von den Daten der äußeren Schleife gelesen werden. Diese Programmierung ist performanter als mit geschachtelten SELECT-Schleifen, da der Cursor für die innere Schleife nicht immer wieder neu aufgesetzt werden muss. Bei einem Gruppenstufenwechsel in der inneren Schleife werden die gelesenen Daten bis zum nächsten Schleifendurchlauf zwischengespeichert, da ein Zurücksetzen des Cursors nicht möglich ist.