An example of a normal DB2 ZOS COBOL program

This is the CUSTINQ program from the Murach book:

       IDENTIFICATION DIVISION.
      *
       PROGRAM-ID.    CUSTINQ.
      *
       ENVIRONMENT DIVISION.
      *
       INPUT-OUTPUT SECTION.
      *
       FILE-CONTROL.
      *
       DATA DIVISION.
      *
       FILE SECTION.
      *
       WORKING-STORAGE SECTION.
      *
       01  SWITCHES.
      *
           05  END-OF-INQUIRIES-SW     PIC X   VALUE 'N'.
               88  END-OF-INQUIRIES            VALUE 'Y'.
           05  CUSTOMER-FOUND-SW       PIC X.
               88  CUSTOMER-FOUND              VALUE 'Y'.
      *
           EXEC SQL
               INCLUDE CUSTOMER
           END-EXEC.
      *
           EXEC SQL
               INCLUDE SQLCA
           END-EXEC.
      *
       PROCEDURE DIVISION.
      *
       000-DISPLAY-CUSTOMER-ROWS.
      *
           PERFORM 100-DISPLAY-CUSTOMER-ROW
               UNTIL END-OF-INQUIRIES.
           STOP RUN.
      *
       100-DISPLAY-CUSTOMER-ROW.
      *
           PERFORM 110-ACCEPT-CUSTOMER-NUMBER.
           IF NOT END-OF-INQUIRIES
               MOVE 'Y' TO CUSTOMER-FOUND-SW
               PERFORM 120-GET-CUSTOMER-ROW
               IF CUSTOMER-FOUND
                   PERFORM 130-DISPLAY-CUSTOMER-LINES
               ELSE
                   PERFORM 140-DISPLAY-ERROR-LINES.
      *
       110-ACCEPT-CUSTOMER-NUMBER.
      *
           DISPLAY '------------------------------------------------'.
           DISPLAY 'KEY IN THE NEXT CUSTOMER NUMBER AND PRESS ENTER,'.
           DISPLAY 'OR KEY IN 999999 AND PRESS ENTER TO QUIT.'.
           ACCEPT CUSTNO.
           IF CUSTNO = '999999'
               MOVE 'Y' TO END-OF-INQUIRIES-SW.
      *
       120-GET-CUSTOMER-ROW.
      *
           EXEC SQL
               SELECT CUSTNO,    FNAME,       LNAME,
                      ADDR,      CITY,        STATE,
                      ZIPCODE
               INTO  :CUSTNO,       :FNAME,          :LNAME,
                     :ADDR,         :CITY,           :STATE,
                     :ZIPCODE
               FROM   MM01.CUSTOMER
                   WHERE  CUSTNO = :CUSTNO
           END-EXEC.
      *
           IF SQLCODE NOT = 0
               MOVE 'N' TO CUSTOMER-FOUND-SW.
      *
       130-DISPLAY-CUSTOMER-LINES.
      *
           DISPLAY '------------------------------------------------'.
           DISPLAY '   CUSTOMER ' CUSTNO.
           DISPLAY '   NAME     ' FNAME ' ' LNAME.
           DISPLAY '   ADDRESS  ' ADDR.
           DISPLAY '            ' CITY ' ' STATE ' '
                                  ZIPCODE.
      *
       140-DISPLAY-ERROR-LINES.
      *
           DISPLAY '------------------------------------------------'.
           DISPLAY '   CUSTOMER NUMBER ' CUSTNO ' NOT FOUND.'.
      *

This is the code from the WORKING-STORAGE SECTION.

           EXEC SQL
               INCLUDE CUSTOMER
           END-EXEC.
      *
           EXEC SQL
               INCLUDE SQLCA
           END-EXEC.

Notes about this code:

Within "INCLUDE CUSTOMER", CUSTOMER is the DCLGEN generated copybook member

"CUSTOMER" has two areas: A "EXEC SQL DECLARE CUSTOMER TABLE area which lists each column name and data type in the table BUT the data type is a SQL data type, not a COBOL data type.

A COBOL declaration of 01-CUSTOMER-ROW which lists each column name and data type in the table BUT the data type is a COBOL data type, not a SQL data type.