Skip to content

Commit b4779c0

Browse files
authored
Handling SQL error codes
Signed-off-by: Janos Varga <113785741+vargajb@users.noreply.github.com>
1 parent 2e444d9 commit b4779c0

File tree

1 file changed

+53
-2
lines changed
  • COBOL Programming Course #3 - Advanced Topics/Labs/cbl

1 file changed

+53
-2
lines changed

COBOL Programming Course #3 - Advanced Topics/Labs/cbl/CBLDB22.cbl

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,17 @@
5353
* SQL INCLUDE FOR SQLCA *
5454
*****************************************************
5555
EXEC SQL INCLUDE SQLCA END-EXEC.
56+
*****************************************************
57+
* DECLARATIONS FOR SQL ERROR HANDLING *
58+
*****************************************************
59+
01 ERROR-MESSAGE.
60+
02 ERROR-LEN PIC S9(4) COMP VALUE +1320.
61+
02 ERROR-TEXT PIC X(132) OCCURS 10 TIMES
62+
INDEXED BY ERROR-INDEX.
63+
77 ERROR-TEXT-LEN PIC S9(9) COMP VALUE +132.
64+
77 ERROR-TEXT-HBOUND PIC S9(9) COMP VALUE +10.
65+
* USER DEFINED ERROR MESSAGE
66+
01 UD-ERROR-MESSAGE PIC X(80) VALUE SPACES.
5667
*****************************************************
5768
* SQL DECLARATION FOR VIEW ACCOUNTS *
5869
*****************************************************
@@ -120,21 +131,47 @@
120131
*
121132
GET-ALL.
122133
EXEC SQL OPEN CUR1 END-EXEC.
134+
IF SQLCODE NOT = 0 THEN
135+
MOVE 'OPEN CUR1' TO UD-ERROR-MESSAGE
136+
PERFORM SQL-ERROR-HANDLING
137+
END-IF
123138
EXEC SQL FETCH CUR1 INTO :CUSTOMER-RECORD END-EXEC.
124-
PERFORM PRINT-ALL
139+
PERFORM PRINT-ALL
125140
UNTIL SQLCODE IS NOT EQUAL TO ZERO.
141+
IF SQLCODE NOT = 100 THEN
142+
MOVE 'FETCH CUR1' TO UD-ERROR-MESSAGE
143+
PERFORM SQL-ERROR-HANDLING
144+
END-IF
126145
EXEC SQL CLOSE CUR1 END-EXEC.
146+
IF SQLCODE NOT = 0 THEN
147+
MOVE 'CLOSE CUR1' TO UD-ERROR-MESSAGE
148+
PERFORM SQL-ERROR-HANDLING
149+
END-IF
150+
.
127151
*
128152
PRINT-ALL.
129153
PERFORM PRINT-A-LINE.
130154
EXEC SQL FETCH CUR1 INTO :CUSTOMER-RECORD END-EXEC.
131155
*
132156
GET-SPECIFIC.
133157
EXEC SQL OPEN CUR2 END-EXEC.
158+
IF SQLCODE NOT = 0 THEN
159+
MOVE 'OPEN CUR2' TO UD-ERROR-MESSAGE
160+
PERFORM SQL-ERROR-HANDLING
161+
END-IF
134162
EXEC SQL FETCH CUR2 INTO :CUSTOMER-RECORD END-EXEC.
135-
PERFORM PRINT-SPECIFIC
163+
PERFORM PRINT-SPECIFIC
136164
UNTIL SQLCODE IS NOT EQUAL TO ZERO.
165+
IF SQLCODE NOT = 100 THEN
166+
MOVE 'FETCH CUR2' TO UD-ERROR-MESSAGE
167+
PERFORM SQL-ERROR-HANDLING
168+
END-IF
137169
EXEC SQL CLOSE CUR2 END-EXEC.
170+
IF SQLCODE NOT = 0 THEN
171+
MOVE 'CLOSE CUR2' TO UD-ERROR-MESSAGE
172+
PERFORM SQL-ERROR-HANDLING
173+
END-IF
174+
.
138175
*
139176
PRINT-SPECIFIC.
140177
PERFORM PRINT-A-LINE.
@@ -148,3 +185,17 @@
148185
MOVE ACCT-FIRSTN TO ACCT-FIRSTN-O.
149186
MOVE ACCT-COMMENT TO ACCT-COMMENT-O.
150187
WRITE REPREC AFTER ADVANCING 2 LINES.
188+
189+
SQL-ERROR-HANDLING.
190+
DISPLAY 'ERROR AT ' FUNCTION TRIM(UD-ERROR-MESSAGE, TRAILING)
191+
CALL 'DSNTIAR' USING SQLCA ERROR-MESSAGE ERROR-TEXT-LEN.
192+
PERFORM VARYING ERROR-INDEX FROM 1 BY 1
193+
UNTIL ERROR-INDEX > ERROR-TEXT-HBOUND
194+
OR ERROR-TEXT(ERROR-INDEX) = SPACES
195+
DISPLAY FUNCTION TRIM(ERROR-TEXT(ERROR-INDEX), TRAILING)
196+
END-PERFORM
197+
IF SQLCODE NOT = 0 AND SQLCODE NOT = 100
198+
MOVE 1000 TO RETURN-CODE
199+
STOP RUN
200+
END-IF
201+
.

0 commit comments

Comments
 (0)