DB2 Fetch Cursor


Scenario1 - Fetch cursor for retrieving two columns.

 EXEC SQL 
	FETCH F1
	 INTO :HV1,
	      :HV2
   END-EXEC.

Scenario2 - Fetch cursor for retrieving two columns with NULL indicator check.

  EXEC SQL 
	FETCH F2
	 INTO :HV1
	      :HV1-NI,
	      :HV2
	      :HV2-NI
   END-EXEC.

Scenario3 - FETCH statement uses an SQLDA.

  EXEC SQL 
	FETCH F3
	USING DESCRIPTOR :sqlda3
   END-EXEC.

Scenario4 - Fetch cursor using a variable that contains cursor name for retrieving two columns.

Code -

   05 WS-CS-VAR     PIC X(10) VALUE "F4".
   EXEC SQL 
	FETCH WS-CS-VAR
	 INTO :HV1,
	      :HV2
   END-EXEC.

Practical Example -


Scenario - The below example describes how the cursor is declared and used in the COBOL + DB2 program.

Requirement - Display employees id, name, designation from department 1000.

Input -

employee_details table

CURSOR Example Code -

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
       IDENTIFICATION DIVISION.
       PROGRAM-ID. CREADONL.

       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.

           EXEC SQL 
             INCLUDE SQLCA
           END-EXEC.

           EXEC SQL
             INCLUDE EMPLDET
           END-EXEC.

      * DECLARING CURSOR 
           EXEC SQL
                DECLARE CSR1 CURSOR FOR
                SELECT EMP_ID,
                       EMP_NAME,
                       DESIGNATION
                FROM   EMPLOYEE_DETAILS
                WHERE  DEPT_ID = 1000
                FOR    FETCH ONLY
           END-EXEC.

       PROCEDURE DIVISION.

      * OPENING CURSOR
           EXEC SQL
                OPEN CSR1
           END-EXEC.

      * FETCHING CURSOR LOOP UNTIL END OF RESULT TABLE
           IF SQLCODE EQUAL ZERO
              PERFORM FETCH-EMP-DETAILS
                 THRU FETCH-EMP-DETAILS-EXIT
                UNTIL SQLCODE NOT EQUAL 0
           END-IF.

      * CLOSING CURSOR
           EXEC SQL
                CLOSE CSR1
           END-EXEC.

           STOP RUN.

       FETCH-EMP-DETAILS.

      * FETCH CURSOR 
           EXEC SQL
                FETCH CSR1
                INTO   :EMP-ID,
                       :EMP-NAME,
                       :DESIGNATION
           END-EXEC. 

           EVALUATE SQLCODE
               WHEN ZERO
                    DISPLAY  EMP-ID, "|", EMP-NAME, "|",
                             DESIGNATION 
               WHEN 100
                    CONTINUE
               WHEN OTHER
                    DISPLAY "DB2 ERROR:  ", SQLCODE
           END-EVALUATE.

       FETCH-EMP-DETAILS-EXIT.
           EXIT.

Output -

CURSOR Program Output