000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. MYPGM. 000300* 000400* DEMO HANDLING NULLS IN COBOL WITH EMBEDDED SQL. 000500* (C) 2004 BY BILL QUALLS. 000600* 000700 000800 ENVIRONMENT DIVISION. 000900 INPUT-OUTPUT SECTION. 001000 FILE-CONTROL. 001100 001200 DATA DIVISION. 001300 FILE SECTION. 001400 001500 WORKING-STORAGE SECTION. 001600 01 FILLER. 001700 05 FILLER PIC X VALUE 'N'. 001800 88 END-OF-MYTABLE VALUE 'Y'. 001900 05 FLDB-NULL-INDICATOR PIC S9(4) COMP. 002000 05 FLDC-NULL-INDICATOR PIC S9(4) COMP. 002100 002200 EXEC SQL 002300 INCLUDE DCLMYTBL 002400 END-EXEC. 002500 002600 EXEC SQL 002700 INCLUDE SQLCA 002800 END-EXEC. 002900 003000 01 DETAIL-LINE. 003100 05 DL-FLDA PIC X(2). 003200 05 FILLER PIC X(3) VALUE SPACES. 003300 05 DL-FLDB PIC X(2). 003400 05 FILLER PIC X(3) VALUE SPACES. 003500 05 DL-FLDC PIC X(2). 003600 003700 PROCEDURE DIVISION. 003800 0000-MAINLINE. 003900 PERFORM 1000-SETUP. 004000 PERFORM 2000-PROCESS 004100 UNTIL END-OF-MYTABLE. 004200 PERFORM 3000-WRAPUP. 004300 STOP RUN. 004400 004500 1000-SETUP. 004600 EXEC SQL 004700 DECLARE MYTABLE-CURSOR CURSOR FOR 004800 SELECT FLDA, FLDB, FLDC 004900 FROM KC02036.MYTABLE 005000 END-EXEC. 005100 005200 EXEC SQL 005300 OPEN MYTABLE-CURSOR 005400 END-EXEC. 005500 005600 IF SQLCODE = 0 005700 CONTINUE 005800 ELSE 005900 DISPLAY 'ERROR ON OPEN MYTABLE-CURSOR' 006000 DISPLAY 'SQLCODE = ' SQLCODE 006100 STOP RUN 006200 END-IF. 006300 006400 PERFORM 1100-READ-RECORD. 006500 006600 1100-READ-RECORD. 006700 EXEC SQL 006800 FETCH MYTABLE-CURSOR INTO 006900 :MY-FLDA , 007000 :MY-FLDB :FLDB-NULL-INDICATOR, 007100 :MY-FLDC :FLDC-NULL-INDICATOR 007200 END-EXEC. 007300 007400 IF SQLCODE = 0 007500 CONTINUE 007600 ELSE 007700 IF SQLCODE = 100 007800 SET END-OF-MYTABLE TO TRUE 007900 ELSE 008000 DISPLAY 'ERROR ON FETCH MYTABLE-CURSOR' 008100 DISPLAY 'SQLCODE = ' SQLCODE 008200 STOP RUN 008300 END-IF 008400 END-IF. 008500 008600 2000-PROCESS. 008700 MOVE MY-FLDA TO DL-FLDA 008800 008900 IF FLDB-NULL-INDICATOR < 0 009000 MOVE ALL '*' TO DL-FLDB 009100 ELSE 009200 MOVE MY-FLDB TO DL-FLDB 009300 END-IF 009400 009500 IF FLDC-NULL-INDICATOR < 0 009600 MOVE ALL '*' TO DL-FLDC 009700 ELSE 009800 MOVE MY-FLDC TO DL-FLDC 009900 END-IF 010000 010100 DISPLAY DETAIL-LINE. 010200 010300 PERFORM 1100-READ-RECORD. 010400 010500 3000-WRAPUP. 010600 EXEC SQL 010700 CLOSE MYTABLE-CURSOR 010800 END-EXEC. 010900 011000 DISPLAY 'END OF PROGRAM.'.