ABAP Keyword Documentation → ABAP - Reference → Processing External Data → ABAP - Database Accesses → Open SQL → Open SQL - Read Accesses → OPEN CURSOR
Reading Data Through the Cursor
The example shows how to read data through the cursor.
Other versions: 7.31 | 7.40 | 7.54
Source Code
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.
DO.
FETCH NEXT CURSOR c1 INTO wa_spfli.
IF sy-subrc NE 0.
EXIT.
ENDIF.
WRITE: / 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.
WRITE: / wa_sflight-carrid, wa_sflight-connid,
wa_sflight-fldate.
ENDDO.
ENDDO.
CLOSE CURSOR: c1, c2.
Description
The system opens two cursors for the tables SPFLI and SFLIGHT. Since both tables are linked through
a foreign key relationship, you can define a nested loop over the tables by sorting the selection by
the primary key; the system then reads the data of the inner loop dependently on the data of the outer
loop. This way of programming is more efficient than the usage of nested SELECT
loops since the cursor for the inner loop needs not be reset again and again. In a control level change
in the inner loop, the system temporarily stores the data read until the next loop pass since it is not possible to reset the cursor.