Skip to content

ABAP Keyword Documentation →  ABAP - Reference →  Processing External Data →  ABAP - Database Accesses →  Native SQL →  EXEC SQL 

EXEC SQL - OPEN, CLOSE, FETCH

In Native SQL, similar statements to those in Open SQL can be specified to read data using a database cursor.

Other versions: 7.31 | 7.40 | 7.54

Syntax


EXEC SQL. 
  OPEN dbcur FOR SELECT ...
ENDEXEC.

Effect

Opens a database cursor dbcur. For dbcur, a flat character-like host variable can be specified.

Syntax


EXEC SQL. 
  FETCH NEXT dbcur INTO ...
ENDEXEC.

Effect

Reads data using an open database cursor dbcur.

Syntax


EXEC SQL. 
  CLOSE dbcur
ENDEXEC.

Effect

Closes an opened database cursor dbcur.

If no row can be read using FETCH, sy-subrc is set to 4 by ENDEXEC. After a FETCH statement, the system field sy-dbcnt is set to the number of rows read up to that point using the cursor in question. If an overflow occurs because the number or rows is greater than 2,147,483,647, sy-dbcnt is set to -1.


Note

It depends on the database system whether the database cursor in the database is closed implicitly after the extraction of the final row of the results set or not. For this reason, it is advisable to use the statement CLOSE dbcur explicitly.


Example

Reads multiple rows from the database table SPFLI using cursor handling and host variables in Native SQL. If rows are found, sy-subrc is set to 0 and sy-dbcnt is increased by one for each row read.

PARAMETERS p_carrid TYPE spfli-carrid. 

DATA:  connid   TYPE spfli-connid, 
       cityfrom TYPE spfli-cityfrom, 
       cityto   TYPE spfli-cityto. 

EXEC SQL. 
  OPEN dbcur FOR 
    SELECT connid, cityfrom, cityto 
           FROM spfli 
           WHERE mandt  = :sy-mandt AND 
                 carrid = :p_carrid 
ENDEXEC. 

DO. 
  EXEC SQL. 
    FETCH NEXT dbcur INTO :connid, :cityfrom, :cityto 
  ENDEXEC. 
  IF sy-subrc <> 0. 
    EXIT. 
  ELSE. 
    ... 
  ENDIF. 
ENDDO. 

EXEC SQL. 
  CLOSE dbcur 
ENDEXEC.