Example: SQL Statements in COBOL and ILE COBOL Programs: Send Feedback Rate This Page
Example: SQL Statements in COBOL and ILE COBOL Programs: Send Feedback Rate This Page
CBLEX
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
05
05
05
EMPNO
NAME
SALARY
PIC X(6).
PIC X(30).
PIC S9(6)V99 PACKED-DECIMAL.
***************************************************************
* Structure for report 2.
*
***************************************************************
01
RPT2.
15 PROJNO PIC X(6).
15 PROJECT-NAME PIC X(36).
15 EMPLOYEE-COUNT PIC S9(4) BINARY.
15 TOTAL-PROJ-COST PIC S9(10)V99 PACKED-DECIMAL.
2
77
EXEC SQL
INCLUDE SQLCA
END-EXEC.
CODE-EDIT PIC ---99.
***************************************************************
* Headers for reports.
*
***************************************************************
01
01
01
RPT1-HEADERS.
05 RPT1-HEADER1.
10 FILLER PIC X(21) VALUE SPACES.
10 FILLER PIC X(111)
VALUE "REPORT OF PROJECTS AFFECTED BY RAISES".
05 RPT1-HEADER2.
10 FILLER PIC X(9) VALUE "PROJECT".
10 FILLER PIC X(10) VALUE "EMPID".
10 FILLER PIC X(35) VALUE "EMPLOYEE NAME".
10 FILLER PIC X(40) VALUE "SALARY".
RPT2-HEADERS.
05 RPT2-HEADER1.
10 FILLER PIC X(21) VALUE SPACES.
10 FILLER PIC X(111)
VALUE "ACCUMULATED STATISTICS BY PROJECT".
05 RPT2-HEADER2.
10 FILLER PIC X(9) VALUE "PROJECT".
10 FILLER PIC X(38) VALUE SPACES.
10 FILLER PIC X(16) VALUE "NUMBER OF".
10 FILLER PIC X(10) VALUE "TOTAL".
05 RPT2-HEADER3.
10 FILLER PIC X(9) VALUE "NUMBER".
10 FILLER PIC X(38) VALUE "PROJECT NAME".
10 FILLER PIC X(16) VALUE "EMPLOYEES".
10 FILLER PIC X(65) VALUE "COST".
RPT1-DATA.
05 PROJNO
PIC X(6).
05 FILLER
PIC XXX VALUE SPACES.
05 EMPNO
PIC X(6).
05 FILLER
PIC X(4) VALUE SPACES.
05 NAME
PIC X(30).
05 FILLER
PIC X(3) VALUE SPACES.
05 SALARY
PIC ZZZZZ9.99.
108
05 FILLER
PIC X(96) VALUE SPACES.
5722ST1 V5R3M0 040528
Create SQL COBOL Program
CBLEX
08/06/02 11:09:13
Page
3
Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7
...+... 8
SEQNBR Last change
109
01 RPT2-DATA.
110
05 PROJNO PIC X(6).
111
05 FILLER PIC XXX VALUE SPACES.
112
05 PROJECT-NAME PIC X(36).
113
05 FILLER PIC X(4) VALUE SPACES.
114
05 EMPLOYEE-COUNT PIC ZZZ9.
115
05 FILLER PIC X(5) VALUE SPACES.
116
05 TOTAL-PROJ-COST PIC ZZZZZZZZ9.99.
117
05 FILLER PIC X(56) VALUE SPACES.
118
119
PROCEDURE DIVISION.
120
121
A000-MAIN.
122
MOVE 1.04 TO PERCENTAGE.
123
OPEN OUTPUT PRINTFILE.
124
125
***************************************************************
126
* Update the selected employees by the new percentage. If an *
127
* error occurs during the update, ROLLBACK the changes,
*
128
***************************************************************
129
130
3 EXEC SQL
131
WHENEVER SQLERROR GO TO E010-UPDATE-ERROR
132
END-EXEC.
133
4 EXEC SQL
134
UPDATE CORPDATA/EMPLOYEE
135
SET SALARY = SALARY * :PERCENTAGE
136
WHERE COMM >= :COMMISSION
137
END-EXEC.
138
139
***************************************************************
140
* Commit changes.
*
141
***************************************************************
142
143
5 EXEC SQL
144
COMMIT
145
END-EXEC.
146
147
EXEC SQL
148
WHENEVER SQLERROR GO TO E020-REPORT-ERROR
149
END-EXEC.
150
151
***************************************************************
152
* Report the updated statistics for each employee receiving *
153
* a raise and the projects that s/he participates in
*
154
***************************************************************
155
156
***************************************************************
157
* Write out the header for Report 1.
*
158
***************************************************************
159
160
write print-record from rpt1-header1
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
EXIT
178
179
Note:
8 and 9 are located on Part 5 of this figure.
5722ST1 V5R3M0 040528
Create SQL COBOL Program
CBLEX
08/06/02 11:09:13
Page
4
Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7
...+... 8
SEQNBR Last change
180
10 A100-DONE1.
181
EXEC SQL
182
CLOSE C1
183
END-EXEC.
184
185
*************************************************************
186
* For all projects ending at a date later than the RAISE- *
187
* DATE ( i.e. those projects potentially affected by the
*
188
* salary raises generate a report containing the project
*
189
* project number, project name, the count of employees
*
190
* participating in the project and the total salary cost
*
191
* for the project
*
192
*************************************************************
193
194
195
***************************************************************
196
* Write out the header for Report 2.
*
197
***************************************************************
198
199
MOVE SPACES TO PRINT-RECORD.
200
WRITE PRINT-RECORD BEFORE ADVANCING 2 LINES.
201
WRITE PRINT-RECORD FROM RPT2-HEADER1
202
BEFORE ADVANCING 2 LINES.
203
WRITE PRINT-RECORD FROM RPT2-HEADER2
204
BEFORE ADVANCING 1 LINE.
205
WRITE PRINT-RECORD FROM RPT2-HEADER3
206
BEFORE ADVANCING 2 LINES.
207
208
EXEC SQL
209
11 DECLARE C2 CURSOR FOR
210
SELECT EMPPROJACT.PROJNO, PROJNAME, COUNT(*),
211
SUM ( (DAYS(EMENDATE)-DAYS(EMSTDATE)) *
212
EMPTIME * DECIMAL((SALARY / :WORK-DAYS),8,2))
213
FROM CORPDATA/EMPPROJACT, CORPDATA/PROJECT,
214
CORPDATA/EMPLOYEE
215
WHERE EMPPROJACT.PROJNO=PROJECT.PROJNO AND
216
EMPPROJACT.EMPNO =EMPLOYEE.EMPNO AND
217
PRENDATE > :RAISE-DATE
218
GROUP BY EMPPROJACT.PROJNO, PROJNAME
219
ORDER BY 1
220
END-EXEC.
221
EXEC SQL
222
OPEN C2
223
END-EXEC.
224
225
PERFORM C000-GENERATE-REPORT2 THRU C010-GENERATE-REPORT2EXIT
226
UNTIL SQLCODE NOT EQUAL TO ZERO.
227
228
A200-DONE2.
229
EXEC SQL
230
CLOSE C2
231
END-EXEC
232
233
***************************************************************
234
* All done.
*
235
***************************************************************
236
237
A900-MAIN-EXIT.
238
CLOSE PRINTFILE.
239
STOP RUN.
240
5722ST1 V5R3M0 040528
Create SQL COBOL Program
CBLEX
08/06/02 11:09:13
Page
5
Record *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7
...+... 8
SEQNBR Last change
241
***************************************************************
242
* Fetch and write the rows to PRINTFILE.
*
243
***************************************************************
244
245
B000-GENERATE-REPORT1.
246
8 EXEC SQL
247
WHENEVER NOT FOUND GO TO A100-DONE1
248
END-EXEC.
249
9 EXEC SQL
250
FETCH C1 INTO :PROJECT.PROJNO, :RPT1.EMPNO,
251
:RPT1.NAME, :RPT1.SALARY
252
END-EXEC.
253
MOVE CORRESPONDING RPT1 TO RPT1-DATA.
254
MOVE PROJNO OF RPT1 TO PROJNO OF RPT1-DATA.
255
WRITE PRINT-RECORD FROM RPT1-DATA
256
BEFORE ADVANCING 1 LINE.
257
258
B010-GENERATE-REPORT1-EXIT.
259
EXIT.
260
261
***************************************************************
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
SQLCODE
305
306
307
"=" CODE-EDIT
WRITE PRINT-RECORD.
STOP RUN.
* * * *
5722ST1 V5R3M0 040528
Create
08/06/02 11:09:13
Page
6
CROSS REFERENCE
Data Names
Define
ACTNO
168
(NOT NULL) IN CORPDATA.EMPPROJACT
A100-DONE1
****
A200-DONE2
****
267
DATE(10) COLUMN IN CORPDATA.EMPLOYEE
DECIMAL(9,2) COLUMN IN
BIRTHDATE
BONUS
CORPDATA.EMPLOYEE
CODE-EDIT
COMM
134
134
COMM
CORPDATA.EMPLOYEE
COMMISSION
134
CORPDATA
****
C1
165
C2
209
DEPTNO
DEPTNO
CORPDATA.PROJECT
EDLEVEL
(NOT NULL) IN CORPDATA.EMPLOYEE
EMENDATE
CORPDATA.EMPPROJACT
EMENDATE
50
213
DECIMAL(7,2)
136 170
COLLECTION
134 168 168 213 213 214
CURSOR
174 182 250
CURSOR
222 230 270
CHARACTER(3) IN PROJECT
CHARACTER(3) COLUMN (NOT NULL) IN
134
168
DATE(10) COLUMN IN
****
EMPLOYEE
****
EMPLOYEE
****
EMPLOYEE-COUNT
EMPLOYEE-COUNT
EMPNO
63
114
51
EMPNO
EMPNO
CORPDATA.EMPLOYEE
EMPNO
103
134
COLUMN
211
TABLE IN CORPDATA
134 168 214
TABLE
169 216
SMALL INTEGER PRECISION(4,0) IN RPT2
IN RPT2-DATA
CHARACTER(6) IN RPT1
250
CHARACTER(6) IN RPT1-DATA
CHARACTER(6) COLUMN (NOT NULL) IN
EMPNO
****
EMPNO
CORPDATA.EMPPROJACT
EMPPROJACT
168
EMPPROJACT
****
EMPTIME
CORPDATA.EMPPROJACT
EMPTIME
168
EMSTDATE
CORPDATA.EMPPROJACT
EMSTDATE
168
E010-UPDATE-ERROR
****
69
****
43
****
****
****
****
COLUMN
136 170
DECIMAL(9,2) COLUMN IN
COLUMN IN EMPPROJACT
166 169 171 216
COLUMN IN EMPLOYEE
169 216
CHARACTER(6) COLUMN (NOT NULL) IN
TABLE
166 169 210 215 216 218
TABLE IN CORPDATA
168 213
DECIMAL(5,2) COLUMN IN
COLUMN
212
DATE(10) COLUMN IN
COLUMN
211
LABEL
131
E020-REPORT-ERROR
****
FIRSTNME
CORPDATA.EMPLOYEE
FIRSTNME
134
HIREDATE
JOB
CORPDATA.EMPLOYEE
LASTNAME
CORPDATA.EMPLOYEE
LASTNAME
134
134
COLUMN
167
DATE(10) COLUMN IN CORPDATA.EMPLOYEE
CHARACTER(8) COLUMN IN
134
****
MAJPROJ
MAJPROJ
CORPDATA.PROJECT
MIDINIT
CORPDATA.EMPLOYEE
NAME
50
213
COLUMN
167
CHARACTER(6) IN PROJECT
CHARACTER(6) COLUMN IN
134
NAME
5722ST1 V5R3M0 040528
08/06/02 11:09:13
Page
CROSS REFERENCE
PERCENTAGE
****
LABEL
148
VARCHAR(12) COLUMN (NOT NULL) IN
52
CHARACTER(30) IN RPT1
251
105
CHARACTER(30) IN RPT1-DATA
Create SQL COBOL Program
CBLEX
7
42
PHONENO
CORPDATA.EMPLOYEE
PRENDATE
PRENDATE
134
PRENDATE
PRINT-RECORD
PROJECT
PROJECT
213
37
50
****
PROJECT
****
PROJECT-NAME
PROJECT-NAME
PROJNAME
PROJNAME
62
112
50
****
PROJNAME
CORPDATA.PROJECT
PROJNO
213
PROJNO
PROJNO
PROJNO
PROJNO
61
101
110
****
PROJNO
CORPDATA.EMPPROJACT
PROJNO
168
PROJNO
****
50
****
50
****
DECIMAL(5,2)
135
CHARACTER(4) COLUMN IN
DATE(10) IN PROJECT
COLUMN
217
DATE(10) COLUMN IN CORPDATA.PROJECT
CHARACTER(132)
STRUCTURE IN RPT1
TABLE IN CORPDATA
213
TABLE
215
CHARACTER(36) IN RPT2
CHARACTER(36) IN RPT2-DATA
VARCHAR(24) IN PROJECT
COLUMN
210 218
VARCHAR(24) COLUMN (NOT NULL) IN
CHARACTER(6)
250
CHARACTER(6)
CHARACTER(6)
CHARACTER(6)
COLUMN
166 171
CHARACTER(6)
IN PROJECT
IN RPT2
IN RPT1-DATA
IN RPT2-DATA
COLUMN (NOT NULL) IN
COLUMN IN EMPPROJACT
210 215 218
COLUMN IN PROJECT
PROJNO
CORPDATA.PROJECT
PRSTAFF
PRSTAFF
CORPDATA.PROJECT
PRSTDATE
PRSTDATE
RAISE-DATE
213
215
CHARACTER(6) COLUMN (NOT NULL) IN
50
213
DECIMAL(5,2) IN PROJECT
DECIMAL(5,2) COLUMN IN
50
213
41
RESPEMP
RESPEMP
CORPDATA.PROJECT
RPT1
RPT1-DATA
RPT1-HEADERS
RPT1-HEADER1
RPT1-HEADER2
RPT2
50
213
DATE(10) IN PROJECT
DATE(10) COLUMN IN CORPDATA.PROJECT
CHARACTER(11)
217
CHARACTER(6) IN PROJECT
CHARACTER(6) COLUMN (NOT NULL) IN
RPT2-DATA
SS REFERENCE
RPT2-HEADERS
RPT2-HEADER1
RPT2-HEADER2
RPT2-HEADER3
SALARY
109
SALARY
SALARY
107
****
SALARY
CORPDATA.EMPLOYEE
SEX
CORPDATA.EMPLOYEE
TOTAL-PROJ-COST
TOTAL-PROJ-COST
WORK-DAYS
134
IN RPT2-HEADERS
IN RPT2-HEADERS
IN RPT2-HEADERS
DECIMAL(8,2) IN RPT1
251
IN RPT1-DATA
COLUMN
135 135 167 212
DECIMAL(9,2) COLUMN IN
134
CHARACTER(1) COLUMN IN
64
116
40
WORKDEPT
CORPDATA.EMPLOYEE
No errors found in source
307 Source records processed
134
DECIMAL(12,2) IN RPT2
IN RPT2-DATA
SMALL INTEGER PRECISION(4,0)
212
CHARACTER(3) COLUMN IN
49
100
75
76
80
60
85
86
90
95
53
* * * * *
IN RPT1-HEADERS
IN RPT1-HEADERS
STRUCTURE
270
E N D
O F
L I S T I N G
* * * * *
___________________-