The following program shows how SQL statements can be embedded in a COBOL program. Note that the copybook EMPREC has been included in the program using the INCLUDE statement.
This program declares a cursor, opens it, and then fetches data into a set of host variables. The host data is displayed. (Note the use of the indicator variable used with the commission variable COM.) When the end of data is reached, or when the user is finished viewing data, the loop is terminated, the cursor is closed, and the program ends.
IDENTIFICATION DIVISION. PROGRAM-ID. TESTALL. AUTHOR-NAME. ME. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-AT. OBJECT-COMPUTER. IBM-AT. INPUT-OUTPUT SECTION. FILE-CONTROL. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. EXEC SQL INCLUDE EMPREC END-EXEC. 01 DISP-RATE PIC $$$,$$$,$$9.99. 01 DISP-COM PIC Z.99. 01 DISP-CODE PIC ----9. 01 FAKE-CHAR PIC X. 01 ANSS PIC X. 01 COM-NULL-IND PIC S9(4) COMP. EXEC SQL INCLUDE SQLCA END-EXEC. PROCEDURE DIVISION. 100-MAIN. * declare cursor for select EXEC SQL DECLARE EMPTBL CURSOR FOR SELECT * FROM EMPLOYEE ORDER BY LNAME END-EXEC * open cursor EXEC SQL OPEN EMPTBL END-EXEC MOVE SQLCODE TO DISP-CODE DISPLAY 'open ' DISP-CODE * fetch a data item EXEC SQL FETCH EMPTBL INTO :ENO,:LNAME,:FNAME,:STREET,:CITY, :ST,:ZIP,:DEPT,:PAYRATE, :COM :COM-NULL-IND END-EXEC. 100-test. MOVE SQLCODE TO DISP-CODE DISPLAY 'fetch ' DISP-CODE * loop until no more data PERFORM UNTIL SQLCODE < 0 OR SQLCODE = 100 * display the record MOVE PAYRATE TO DISP-RATE MOVE COM TO DISP-COM DISPLAY 'department ' DEPT DISPLAY 'last name ' LNAME DISPLAY 'first name ' FNAME DISPLAY 'street ' STREET DISPLAY 'city ' CITY DISPLAY 'state ' ST DISPLAY 'zip code ' ZIP DISPLAY 'payrate ' DISP-RATE IF COM-NULL-IND < 0 DISPLAY 'commission is null' ELSE DISPLAY 'commission ' DISP-COM END-IF DISPLAY 'Do you want to see the next record? (y/n)' ACCEPT ANSS IF ANSS = 'Y' OR 'y' EXEC SQL FETCH EMPTBL INTO :ENO,:LNAME,:FNAME,:STREET,:CITY, :ST,:ZIP,:DEPT,:PAYRATE, :COM :COM-NULL-IND END-EXEC ELSE GO TO CLOSE-LOOP END-IF MOVE SQLCODE TO DISP-CODE DISPLAY 'fetch ' DISP-CODE END-PERFORM DISPLAY 'All records in this table have been selected'. CLOSE-LOOP. * close the cursor EXEC SQL CLOSE EMPTBL END-EXEC. 100-EXIT. STOP RUN.