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.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498IDENTIFICATION 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.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081IDENTIFICATION 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.