Let's understand Mainframe
Home Tutorials Interview Q&A Quiz Mainframe Memes Contact us About us

Module 9: DB2 COBOL Programming


DB2 Program Structure

A DB2 COBOL program follows the standard COBOL division structure, with DB2-specific pieces added: INCLUDE SQLCA and DCLGEN copybooks in WORKING-STORAGE, cursor DECLAREs in the DATA DIVISION, and EXEC SQL statements with SQLCODE checks in the PROCEDURE DIVISION.

The divisions of a DB2 program

  • IDENTIFICATION DIVISION: PROGRAM-ID as usual. Nothing DB2-specific here.
  • ENVIRONMENT DIVISION: file and device descriptions as usual. DB2 tables need no SELECT/ASSIGN entries.
  • DATA DIVISION, WORKING-STORAGE: EXEC SQL INCLUDE SQLCA END-EXEC first, then DCLGEN copybook INCLUDEs, then host variable declarations, then EXEC SQL DECLARE CURSOR statements.
  • PROCEDURE DIVISION: program logic with EXEC SQL blocks (OPEN, FETCH, CLOSE, SELECT, INSERT, UPDATE, DELETE, COMMIT), checking SQLCODE after each one.

DCLGEN: generated declarations

  • DCLGEN (Declarations Generator) is a DB2I facility that generates the SQL DECLARE TABLE statement and matching COBOL host variable declarations for a table.
  • The output is stored as a copybook member and pulled in with EXEC SQL INCLUDE member-name END-EXEC.
  • Using DCLGEN guarantees the host variables match the table definition exactly, avoiding -310 mismatches.
  • Regenerate the DCLGEN copybook whenever the table definition changes (ALTER TABLE).

Standard paragraph flow

  • MAIN-PARA drives the program: open the cursor, fetch in a loop until SQLCODE is not 0, close the cursor, COMMIT, STOP RUN.
  • OPEN-PARA opens the cursor and stops the program if SQLCODE is not 0.
  • FETCH-PARA fetches one row; on SQLCODE 0 process the row, on 100 end the loop, otherwise display the error and stop.
  • CLOSE-PARA closes the cursor to release DB2 resources.

Example of a complete DB2 COBOL program skeleton:-

IDENTIFICATION DIVISION. PROGRAM-ID. DB2PROG1. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. EXEC SQL INCLUDE SQLCA END-EXEC. EXEC SQL INCLUDE EMPROW END-EXEC. EXEC SQL DECLARE C1 CURSOR FOR SELECT EMPNO, SALARY FROM EMP WHERE DEPTNO = :WS-DEPT END-EXEC. 01 WS-DEPT PIC X(3) VALUE 'A01'. 01 WS-EMPNO PIC X(6). 01 WS-SALARY PIC S9(7)V9(2) COMP-3. PROCEDURE DIVISION. MAIN-PARA. PERFORM OPEN-PARA. PERFORM FETCH-PARA UNTIL SQLCODE NOT = 0. PERFORM CLOSE-PARA. EXEC SQL COMMIT END-EXEC. STOP RUN. OPEN-PARA. EXEC SQL OPEN C1 END-EXEC. IF SQLCODE NOT = 0 DISPLAY 'OPEN FAILED : ' SQLCODE STOP RUN END-IF. FETCH-PARA. EXEC SQL FETCH C1 INTO :WS-EMPNO, :WS-SALARY END-EXEC. IF SQLCODE = 0 DISPLAY WS-EMPNO ' ' WS-SALARY ELSE IF SQLCODE = 100 DISPLAY 'END OF DATA' ELSE DISPLAY 'FETCH FAILED : ' SQLCODE STOP RUN END-IF END-IF. CLOSE-PARA. EXEC SQL CLOSE C1 END-EXEC.





© copyright mainframebug.com
Privacy Policy
MainframeBug Assistant