AS ABAP Release 753, ©Copyright 2019 SAP AG. All rights reserved.
ABAP Keyword Documentation → ABAP − Reference → Processing External Data → ABAP Database Access → ABAP SQL → ABAP SQL - Reads → OPEN CURSOR →
FETCH
Syntax
FETCH NEXT CURSOR dbcur INTO|APPENDING ....
Effect
The ABAP SQL statement FETCH extracts the requested rows (using the addition INTO or APPENDING) from the results set of the database cursor (associated with the cursor variable dbcur) from the current cursor position and assigns these rows to the data objects specified in the results set.
The cursor variable dbcur must be a host variable declared by the special predefined data type cursor, which was opened with the statement OPEN CURSOR, or to which an opened cursor was assigned. Otherwise, a handleable exception of the class CX_SY_OPEN_SQL_DB is raised. The name of a host variable should be prefixed with the escape character @.
The syntax and meaning of the addition INTO or APPENDING are the same as the identically named additions of the SELECT statement, with the exception that no inline declarations can be made there and no LOB handles can be created.
If non-table-like data objects are specified after INTO, one row is extracted. If an internal table is specified after INTO or APPENDING, either all rows are extracted, or as many as specified in the addition PACKAGE SIZE.
The statement FETCH moves the position of the database cursor (which is associated
with dbcur) by the amount of extracted rows to the next row to be extracted.
If the last row of the results set was extracted in a FETCH statement, each subsequent FETCH statement in which
dbcur is associated with the same database cursor sets sy-subrc
to 4, without affecting the data objects specified after INTO or APPENDING.
System Fields
The statement FETCH sets the values of the system fields sy-subrc and sy-dbcnt.
sy-subrc | Meaning |
0 | At least one row was extracted from the results set. |
4 | No row was extracted. |
After every row extraction, the statement FETCH sets sy-dbcnt
to the amount of rows extracted so far from the relevant results set. If an overflow occurs because
the number or rows is greater than 2,147,483,647, sy-dbcnt is set to -1. If no row can be extracted, sy-dbcnt is set to 0.
Notes
Example
Reading of data from the database table SPFLI in packets of varying size using two parallel cursors. The packet size is determined by the first cursor using the aggregation functioncount( * ) and using the second cursor for access. Variable control of the addition PACKAGE SIZE is not possible within a single SELECT statement.
OPEN CURSOR @DATA(dbcur1) FOR
SELECT carrid, COUNT(*) AS count
FROM spfli
GROUP BY carrid
ORDER BY carrid.
OPEN CURSOR @DATA(dbcur2) FOR
SELECT *
FROM spfli
ORDER BY carrid.
DATA: BEGIN OF counter,
carrid TYPE spfli-carrid,
count TYPE i,
END OF counter,
spfli_tab TYPE TABLE OF spfli.
DO.
FETCH NEXT CURSOR @dbcur1 INTO @counter.
IF sy-subrc <> 0.
EXIT.
ENDIF.
cl_demo_output=>next_section( |{ counter-carrid
}, { counter-count }| ).
FETCH NEXT CURSOR @dbcur2
INTO TABLE @spfli_tab PACKAGE SIZE @counter-count.
cl_demo_output=>write( spfli_tab ).
ENDDO.
CLOSE CURSOR: @dbcur1,
@dbcur2.
cl_demo_output=>display( ).