MainframeMaster

COBOL Tutorial

COBOL EXEC and EXECUTE Statements

The EXEC and EXECUTE statements represent powerful integration mechanisms in COBOL programming, providing sophisticated capabilities for embedded SQL processing, database interaction, external program execution, and system command invocation. These statements serve as bridges between COBOL applications and external systems, enabling seamless data access, dynamic SQL execution, and comprehensive system integration while maintaining the structured programming paradigm inherent in COBOL development environments.

Comprehensive EXEC SQL Implementation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
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
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
IDENTIFICATION DIVISION. PROGRAM-ID. EXEC-SQL-COMPREHENSIVE. DATA DIVISION. WORKING-STORAGE SECTION. *> SQL Communication Area EXEC SQL INCLUDE SQLCA END-EXEC. *> Host Variables for Database Operations 01 HOST-VARIABLES. 05 HV-EMPLOYEE-ID PIC 9(6). 05 HV-EMPLOYEE-NAME PIC X(30). 05 HV-EMPLOYEE-SALARY PIC 9(7)V99. 05 HV-DEPARTMENT-CODE PIC X(4). 05 HV-HIRE-DATE PIC X(10). 05 HV-EMPLOYEE-COUNT PIC 9(5). 05 HV-AVERAGE-SALARY PIC 9(7)V99. 05 HV-MAX-SALARY PIC 9(7)V99. 05 HV-MIN-SALARY PIC 9(7)V99. *> Dynamic SQL Variables 01 DYNAMIC-SQL-VARIABLES. 05 SQL-STATEMENT PIC X(500). 05 SQL-STATEMENT-LENGTH PIC 9(4). 05 SQL-CURSOR-NAME PIC X(18) VALUE 'DYNAMIC_CURSOR'. 05 SQL-PREPARE-NAME PIC X(18) VALUE 'DYNAMIC_STMT'. *> SQL Status and Error Handling 01 SQL-STATUS-HANDLING. 05 SQL-OPERATION PIC X(20). 05 SQL-RETURN-CODE PIC S9(9) COMP. 05 SQL-ERROR-MESSAGE PIC X(100). 05 SQL-ROWS-PROCESSED PIC 9(7). 05 SQL-WARNING-FLAG PIC X VALUE 'N'. 88 SQL-WARNING VALUE 'Y'. 88 NO-SQL-WARNING VALUE 'N'. *> Transaction Control Variables 01 TRANSACTION-CONTROL. 05 TRANSACTION-STATUS PIC X VALUE 'N'. 88 TRANSACTION-ACTIVE VALUE 'Y'. 88 NO-TRANSACTION VALUE 'N'. 05 SAVEPOINT-NAME PIC X(20). 05 COMMIT-COUNT PIC 9(5) VALUE 0. 05 ROLLBACK-COUNT PIC 9(5) VALUE 0. *> Performance Monitoring 01 PERFORMANCE-METRICS. 05 TOTAL-SQL-OPERATIONS PIC 9(7) VALUE 0. 05 SUCCESSFUL-OPERATIONS PIC 9(7) VALUE 0. 05 FAILED-OPERATIONS PIC 9(7) VALUE 0. 05 SELECT-OPERATIONS PIC 9(5) VALUE 0. 05 INSERT-OPERATIONS PIC 9(5) VALUE 0. 05 UPDATE-OPERATIONS PIC 9(5) VALUE 0. 05 DELETE-OPERATIONS PIC 9(5) VALUE 0. PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM INITIALIZE-DATABASE-CONNECTION PERFORM DEMONSTRATE-BASIC-SQL-OPERATIONS PERFORM DEMONSTRATE-CURSOR-OPERATIONS PERFORM DEMONSTRATE-DYNAMIC-SQL PERFORM DEMONSTRATE-TRANSACTION-CONTROL PERFORM DEMONSTRATE-STORED-PROCEDURES PERFORM DISPLAY-PERFORMANCE-METRICS PERFORM CLEANUP-DATABASE-CONNECTION STOP RUN. INITIALIZE-DATABASE-CONNECTION. DISPLAY 'Initializing database connection...' EXEC SQL CONNECT TO :DATABASE-NAME USER :USER-ID USING :PASSWORD END-EXEC MOVE 'CONNECT' TO SQL-OPERATION PERFORM CHECK-SQL-STATUS IF SQLCODE = 0 DISPLAY 'Database connection established successfully' SET TRANSACTION-ACTIVE TO TRUE ELSE DISPLAY 'Database connection failed' PERFORM DISPLAY-SQL-ERROR STOP RUN END-IF. DEMONSTRATE-BASIC-SQL-OPERATIONS. DISPLAY 'Demonstrating basic SQL operations...' PERFORM INSERT-EMPLOYEE-RECORD PERFORM SELECT-EMPLOYEE-RECORD PERFORM UPDATE-EMPLOYEE-RECORD PERFORM DELETE-EMPLOYEE-RECORD PERFORM AGGREGATE-OPERATIONS. INSERT-EMPLOYEE-RECORD. DISPLAY 'Inserting employee record...' MOVE 123456 TO HV-EMPLOYEE-ID MOVE 'JOHN SMITH' TO HV-EMPLOYEE-NAME MOVE 75000.00 TO HV-EMPLOYEE-SALARY MOVE 'IT01' TO HV-DEPARTMENT-CODE MOVE '2024-01-15' TO HV-HIRE-DATE EXEC SQL INSERT INTO EMPLOYEES (EMPLOYEE_ID, EMPLOYEE_NAME, SALARY, DEPARTMENT_CODE, HIRE_DATE) VALUES (:HV-EMPLOYEE-ID, :HV-EMPLOYEE-NAME, :HV-EMPLOYEE-SALARY, :HV-DEPARTMENT-CODE, :HV-HIRE-DATE) END-EXEC MOVE 'INSERT' TO SQL-OPERATION ADD 1 TO INSERT-OPERATIONS PERFORM CHECK-SQL-STATUS IF SQLCODE = 0 DISPLAY 'Employee record inserted successfully' ADD 1 TO SUCCESSFUL-OPERATIONS ELSE DISPLAY 'Insert operation failed' ADD 1 TO FAILED-OPERATIONS PERFORM DISPLAY-SQL-ERROR END-IF. SELECT-EMPLOYEE-RECORD. DISPLAY 'Selecting employee record...' MOVE 123456 TO HV-EMPLOYEE-ID EXEC SQL SELECT EMPLOYEE_NAME, SALARY, DEPARTMENT_CODE, HIRE_DATE INTO :HV-EMPLOYEE-NAME, :HV-EMPLOYEE-SALARY, :HV-DEPARTMENT-CODE, :HV-HIRE-DATE FROM EMPLOYEES WHERE EMPLOYEE_ID = :HV-EMPLOYEE-ID END-EXEC MOVE 'SELECT' TO SQL-OPERATION ADD 1 TO SELECT-OPERATIONS PERFORM CHECK-SQL-STATUS EVALUATE SQLCODE WHEN 0 DISPLAY 'Employee record found:' DISPLAY 'Name: ' HV-EMPLOYEE-NAME DISPLAY 'Salary: ' HV-EMPLOYEE-SALARY DISPLAY 'Department: ' HV-DEPARTMENT-CODE DISPLAY 'Hire Date: ' HV-HIRE-DATE ADD 1 TO SUCCESSFUL-OPERATIONS WHEN 100 DISPLAY 'No employee found with ID: ' HV-EMPLOYEE-ID ADD 1 TO SUCCESSFUL-OPERATIONS WHEN OTHER DISPLAY 'Select operation failed' ADD 1 TO FAILED-OPERATIONS PERFORM DISPLAY-SQL-ERROR END-EVALUATE. UPDATE-EMPLOYEE-RECORD. DISPLAY 'Updating employee record...' MOVE 123456 TO HV-EMPLOYEE-ID MOVE 80000.00 TO HV-EMPLOYEE-SALARY EXEC SQL UPDATE EMPLOYEES SET SALARY = :HV-EMPLOYEE-SALARY WHERE EMPLOYEE_ID = :HV-EMPLOYEE-ID END-EXEC MOVE 'UPDATE' TO SQL-OPERATION ADD 1 TO UPDATE-OPERATIONS PERFORM CHECK-SQL-STATUS IF SQLCODE = 0 DISPLAY 'Employee salary updated successfully' DISPLAY 'Rows affected: ' SQLERRD(3) ADD 1 TO SUCCESSFUL-OPERATIONS ELSE DISPLAY 'Update operation failed' ADD 1 TO FAILED-OPERATIONS PERFORM DISPLAY-SQL-ERROR END-IF. DELETE-EMPLOYEE-RECORD. DISPLAY 'Deleting employee record...' MOVE 123456 TO HV-EMPLOYEE-ID EXEC SQL DELETE FROM EMPLOYEES WHERE EMPLOYEE_ID = :HV-EMPLOYEE-ID END-EXEC MOVE 'DELETE' TO SQL-OPERATION ADD 1 TO DELETE-OPERATIONS PERFORM CHECK-SQL-STATUS IF SQLCODE = 0 DISPLAY 'Employee record deleted successfully' DISPLAY 'Rows affected: ' SQLERRD(3) ADD 1 TO SUCCESSFUL-OPERATIONS ELSE DISPLAY 'Delete operation failed' ADD 1 TO FAILED-OPERATIONS PERFORM DISPLAY-SQL-ERROR END-IF. AGGREGATE-OPERATIONS. DISPLAY 'Performing aggregate operations...' EXEC SQL SELECT COUNT(*), AVG(SALARY), MAX(SALARY), MIN(SALARY) INTO :HV-EMPLOYEE-COUNT, :HV-AVERAGE-SALARY, :HV-MAX-SALARY, :HV-MIN-SALARY FROM EMPLOYEES WHERE DEPARTMENT_CODE = :HV-DEPARTMENT-CODE END-EXEC MOVE 'AGGREGATE' TO SQL-OPERATION ADD 1 TO SELECT-OPERATIONS PERFORM CHECK-SQL-STATUS IF SQLCODE = 0 DISPLAY 'Aggregate results for department ' HV-DEPARTMENT-CODE ':' DISPLAY 'Employee count: ' HV-EMPLOYEE-COUNT DISPLAY 'Average salary: ' HV-AVERAGE-SALARY DISPLAY 'Maximum salary: ' HV-MAX-SALARY DISPLAY 'Minimum salary: ' HV-MIN-SALARY ADD 1 TO SUCCESSFUL-OPERATIONS ELSE DISPLAY 'Aggregate operation failed' ADD 1 TO FAILED-OPERATIONS PERFORM DISPLAY-SQL-ERROR END-IF. DEMONSTRATE-CURSOR-OPERATIONS. DISPLAY 'Demonstrating cursor operations...' EXEC SQL DECLARE EMP_CURSOR CURSOR FOR SELECT EMPLOYEE_ID, EMPLOYEE_NAME, SALARY FROM EMPLOYEES WHERE DEPARTMENT_CODE = :HV-DEPARTMENT-CODE ORDER BY SALARY DESC END-EXEC EXEC SQL OPEN EMP_CURSOR END-EXEC MOVE 'CURSOR OPEN' TO SQL-OPERATION PERFORM CHECK-SQL-STATUS IF SQLCODE = 0 DISPLAY 'Cursor opened successfully' PERFORM FETCH-CURSOR-RECORDS PERFORM CLOSE-CURSOR ELSE DISPLAY 'Cursor open failed' PERFORM DISPLAY-SQL-ERROR END-IF. FETCH-CURSOR-RECORDS. DISPLAY 'Fetching cursor records...' PERFORM UNTIL SQLCODE NOT = 0 EXEC SQL FETCH EMP_CURSOR INTO :HV-EMPLOYEE-ID, :HV-EMPLOYEE-NAME, :HV-EMPLOYEE-SALARY END-EXEC MOVE 'CURSOR FETCH' TO SQL-OPERATION PERFORM CHECK-SQL-STATUS EVALUATE SQLCODE WHEN 0 DISPLAY 'Employee: ' HV-EMPLOYEE-ID ' ' HV-EMPLOYEE-NAME ' ' HV-EMPLOYEE-SALARY ADD 1 TO SUCCESSFUL-OPERATIONS WHEN 100 DISPLAY 'End of cursor reached' WHEN OTHER DISPLAY 'Cursor fetch failed' ADD 1 TO FAILED-OPERATIONS PERFORM DISPLAY-SQL-ERROR END-EVALUATE END-PERFORM. CLOSE-CURSOR. EXEC SQL CLOSE EMP_CURSOR END-EXEC MOVE 'CURSOR CLOSE' TO SQL-OPERATION PERFORM CHECK-SQL-STATUS IF SQLCODE = 0 DISPLAY 'Cursor closed successfully' ELSE DISPLAY 'Cursor close failed' PERFORM DISPLAY-SQL-ERROR END-IF. DEMONSTRATE-DYNAMIC-SQL. DISPLAY 'Demonstrating dynamic SQL...' MOVE 'SELECT COUNT(*) FROM EMPLOYEES WHERE SALARY > ?' TO SQL-STATEMENT MOVE LENGTH OF SQL-STATEMENT TO SQL-STATEMENT-LENGTH EXEC SQL PREPARE :SQL-PREPARE-NAME FROM :SQL-STATEMENT END-EXEC MOVE 'PREPARE' TO SQL-OPERATION PERFORM CHECK-SQL-STATUS IF SQLCODE = 0 DISPLAY 'Dynamic SQL prepared successfully' PERFORM EXECUTE-DYNAMIC-SQL ELSE DISPLAY 'Dynamic SQL prepare failed' PERFORM DISPLAY-SQL-ERROR END-IF. EXECUTE-DYNAMIC-SQL. MOVE 50000.00 TO HV-EMPLOYEE-SALARY EXEC SQL EXECUTE :SQL-PREPARE-NAME USING :HV-EMPLOYEE-SALARY INTO :HV-EMPLOYEE-COUNT END-EXEC MOVE 'EXECUTE' TO SQL-OPERATION PERFORM CHECK-SQL-STATUS IF SQLCODE = 0 DISPLAY 'Dynamic SQL executed successfully' DISPLAY 'Employees with salary > ' HV-EMPLOYEE-SALARY ': ' HV-EMPLOYEE-COUNT ADD 1 TO SUCCESSFUL-OPERATIONS ELSE DISPLAY 'Dynamic SQL execution failed' ADD 1 TO FAILED-OPERATIONS PERFORM DISPLAY-SQL-ERROR END-IF. DEMONSTRATE-TRANSACTION-CONTROL. DISPLAY 'Demonstrating transaction control...' EXEC SQL BEGIN TRANSACTION END-EXEC MOVE 'BEGIN TRANSACTION' TO SQL-OPERATION PERFORM CHECK-SQL-STATUS IF SQLCODE = 0 DISPLAY 'Transaction started successfully' PERFORM TRANSACTION-OPERATIONS ELSE DISPLAY 'Transaction start failed' PERFORM DISPLAY-SQL-ERROR END-IF. TRANSACTION-OPERATIONS. *> Perform multiple operations in transaction MOVE 'TRANS_SAVE_1' TO SAVEPOINT-NAME EXEC SQL SAVEPOINT :SAVEPOINT-NAME END-EXEC MOVE 'SAVEPOINT' TO SQL-OPERATION PERFORM CHECK-SQL-STATUS *> Simulate transaction success EXEC SQL COMMIT END-EXEC MOVE 'COMMIT' TO SQL-OPERATION PERFORM CHECK-SQL-STATUS IF SQLCODE = 0 DISPLAY 'Transaction committed successfully' ADD 1 TO COMMIT-COUNT ELSE DISPLAY 'Transaction commit failed' PERFORM ROLLBACK-TRANSACTION END-IF. ROLLBACK-TRANSACTION. EXEC SQL ROLLBACK END-EXEC MOVE 'ROLLBACK' TO SQL-OPERATION PERFORM CHECK-SQL-STATUS IF SQLCODE = 0 DISPLAY 'Transaction rolled back successfully' ADD 1 TO ROLLBACK-COUNT ELSE DISPLAY 'Transaction rollback failed' PERFORM DISPLAY-SQL-ERROR END-IF. DEMONSTRATE-STORED-PROCEDURES. DISPLAY 'Demonstrating stored procedure calls...' MOVE 'IT01' TO HV-DEPARTMENT-CODE EXEC SQL CALL GET_DEPT_STATISTICS(:HV-DEPARTMENT-CODE, :HV-EMPLOYEE-COUNT, :HV-AVERAGE-SALARY) END-EXEC MOVE 'STORED PROCEDURE' TO SQL-OPERATION PERFORM CHECK-SQL-STATUS IF SQLCODE = 0 DISPLAY 'Stored procedure executed successfully' DISPLAY 'Department statistics:' DISPLAY 'Employee count: ' HV-EMPLOYEE-COUNT DISPLAY 'Average salary: ' HV-AVERAGE-SALARY ADD 1 TO SUCCESSFUL-OPERATIONS ELSE DISPLAY 'Stored procedure call failed' ADD 1 TO FAILED-OPERATIONS PERFORM DISPLAY-SQL-ERROR END-IF. CHECK-SQL-STATUS. ADD 1 TO TOTAL-SQL-OPERATIONS MOVE SQLCODE TO SQL-RETURN-CODE EVALUATE SQLCODE WHEN 0 SET NO-SQL-WARNING TO TRUE WHEN POSITIVE SET SQL-WARNING TO TRUE DISPLAY 'SQL Warning for ' SQL-OPERATION ': ' SQLCODE WHEN NEGATIVE DISPLAY 'SQL Error for ' SQL-OPERATION ': ' SQLCODE END-EVALUATE. DISPLAY-SQL-ERROR. DISPLAY 'SQL Error Details:' DISPLAY 'Operation: ' SQL-OPERATION DISPLAY 'SQLCODE: ' SQLCODE DISPLAY 'SQLERRM: ' SQLERRM DISPLAY 'SQLERRD(3): ' SQLERRD(3). DISPLAY-PERFORMANCE-METRICS. DISPLAY 'SQL Performance Metrics:' DISPLAY '========================' DISPLAY 'Total operations: ' TOTAL-SQL-OPERATIONS DISPLAY 'Successful operations: ' SUCCESSFUL-OPERATIONS DISPLAY 'Failed operations: ' FAILED-OPERATIONS DISPLAY 'SELECT operations: ' SELECT-OPERATIONS DISPLAY 'INSERT operations: ' INSERT-OPERATIONS DISPLAY 'UPDATE operations: ' UPDATE-OPERATIONS DISPLAY 'DELETE operations: ' DELETE-OPERATIONS DISPLAY 'Commits: ' COMMIT-COUNT DISPLAY 'Rollbacks: ' ROLLBACK-COUNT IF TOTAL-SQL-OPERATIONS > 0 COMPUTE SUCCESSFUL-OPERATIONS = (SUCCESSFUL-OPERATIONS / TOTAL-SQL-OPERATIONS) * 100 DISPLAY 'Success rate: ' SUCCESSFUL-OPERATIONS '%' END-IF. CLEANUP-DATABASE-CONNECTION. DISPLAY 'Cleaning up database connection...' EXEC SQL DISCONNECT END-EXEC MOVE 'DISCONNECT' TO SQL-OPERATION PERFORM CHECK-SQL-STATUS IF SQLCODE = 0 DISPLAY 'Database disconnected successfully' ELSE DISPLAY 'Database disconnect failed' PERFORM DISPLAY-SQL-ERROR END-IF.

EXECUTE Statement for Dynamic Operations

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
IDENTIFICATION DIVISION. PROGRAM-ID. EXECUTE-DYNAMIC-OPERATIONS. DATA DIVISION. WORKING-STORAGE SECTION. 01 DYNAMIC-EXECUTION-CONTROL. 05 COMMAND-STRING PIC X(200). 05 COMMAND-LENGTH PIC 9(4). 05 EXECUTION-STATUS PIC X VALUE 'N'. 88 EXECUTION-SUCCESS VALUE 'Y'. 88 EXECUTION-FAILED VALUE 'N'. 05 RETURN-CODE PIC 9(4). 05 OUTPUT-BUFFER PIC X(500). 05 ERROR-BUFFER PIC X(200). 01 SYSTEM-INTEGRATION. 05 SYSTEM-COMMAND PIC X(100). 05 PARAMETER-LIST PIC X(200). 05 ENVIRONMENT-VARIABLE PIC X(50). 05 ENVIRONMENT-VALUE PIC X(100). 05 PROCESS-ID PIC 9(8). 05 EXECUTION-TIME PIC 9(6). PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM DEMONSTRATE-EXECUTE-IMMEDIATE PERFORM DEMONSTRATE-SYSTEM-COMMANDS PERFORM DEMONSTRATE-PROGRAM-EXECUTION STOP RUN. DEMONSTRATE-EXECUTE-IMMEDIATE. DISPLAY 'Demonstrating EXECUTE IMMEDIATE...' MOVE 'CREATE TABLE TEMP_TABLE (ID INT, NAME VARCHAR(50))' TO COMMAND-STRING EXEC SQL EXECUTE IMMEDIATE :COMMAND-STRING END-EXEC IF SQLCODE = 0 DISPLAY 'Table created successfully via EXECUTE IMMEDIATE' SET EXECUTION-SUCCESS TO TRUE ELSE DISPLAY 'Table creation failed' SET EXECUTION-FAILED TO TRUE END-IF. DEMONSTRATE-SYSTEM-COMMANDS. DISPLAY 'Demonstrating system command execution...' MOVE 'DIR C:TEMP' TO SYSTEM-COMMAND *> Platform-specific execution CALL 'SYSTEM' USING SYSTEM-COMMAND RETURNING RETURN-CODE IF RETURN-CODE = 0 DISPLAY 'System command executed successfully' SET EXECUTION-SUCCESS TO TRUE ELSE DISPLAY 'System command failed with code: ' RETURN-CODE SET EXECUTION-FAILED TO TRUE END-IF. DEMONSTRATE-PROGRAM-EXECUTION. DISPLAY 'Demonstrating program execution...' MOVE 'BATCH-PROCESSOR' TO COMMAND-STRING MOVE 'INPUT=DATA.TXT OUTPUT=RESULT.TXT' TO PARAMETER-LIST CALL COMMAND-STRING USING PARAMETER-LIST RETURNING RETURN-CODE IF RETURN-CODE = 0 DISPLAY 'Program executed successfully' SET EXECUTION-SUCCESS TO TRUE ELSE DISPLAY 'Program execution failed' SET EXECUTION-FAILED TO TRUE END-IF.

Best Practices and FAQ

EXEC SQL Best Practices
  • • Always include SQLCA for error handling
  • • Use host variables for data exchange
  • • Check SQLCODE after every operation
  • • Implement proper transaction control
  • • Use cursors for multi-row processing
Dynamic SQL Guidelines
  • • Validate input parameters thoroughly
  • • Use prepared statements for performance
  • • Implement SQL injection prevention
  • • Handle variable-length statements
  • • Monitor execution performance