MainframeMaster

COBOL Call Statement

The CALL statement in COBOL is a fundamental mechanism for invoking subprograms, enabling modular programming and code reuse. It allows programs to communicate with other programs, pass parameters, and receive return values, making COBOL applications more maintainable and organized.

Understanding the CALL Statement

The CALL statement transfers control from the calling program to a subprogram, executes the subprogram, and then returns control to the calling program. This mechanism enables code modularity, reusability, and separation of concerns in COBOL applications.

Basic CALL Statement Syntax

cobol
1
2
3
4
5
6
CALL 'subprogram-name' USING parameter-list ON EXCEPTION error-handling-statements NOT ON EXCEPTION success-handling-statements END-CALL.

Simple CALL Statement Example

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
IDENTIFICATION DIVISION. PROGRAM-ID. MAIN-PROGRAM. DATA DIVISION. WORKING-STORAGE SECTION. 01 CALCULATION-DATA. 05 FIRST-NUMBER PIC 9(5)V99. 05 SECOND-NUMBER PIC 9(5)V99. 05 RESULT PIC 9(6)V99. 05 OPERATION PIC X(1). 88 ADDITION VALUE 'A'. 88 SUBTRACTION VALUE 'S'. 88 MULTIPLICATION VALUE 'M'. 88 DIVISION VALUE 'D'. 01 RETURN-CODE. 05 RC PIC 9(2). 88 SUCCESS VALUE 00. 88 ERROR VALUE 99. PROCEDURE DIVISION. MAIN-LOGIC. MOVE 100.50 TO FIRST-NUMBER MOVE 25.25 TO SECOND-NUMBER MOVE 'A' TO OPERATION CALL 'CALCULATOR' USING CALCULATION-DATA RETURN-CODE IF SUCCESS DISPLAY 'Result: ' RESULT ELSE DISPLAY 'Calculation Error' END-IF STOP RUN.

Subprogram Structure

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
IDENTIFICATION DIVISION. PROGRAM-ID. CALCULATOR. DATA DIVISION. LINKAGE SECTION. 01 CALCULATION-DATA. 05 FIRST-NUMBER PIC 9(5)V99. 05 SECOND-NUMBER PIC 9(5)V99. 05 RESULT PIC 9(6)V99. 05 OPERATION PIC X(1). 01 RETURN-CODE. 05 RC PIC 9(2). PROCEDURE DIVISION USING CALCULATION-DATA RETURN-CODE. MAIN-CALCULATION. EVALUATE OPERATION WHEN 'A' ADD FIRST-NUMBER TO SECOND-NUMBER GIVING RESULT MOVE 00 TO RC WHEN 'S' SUBTRACT SECOND-NUMBER FROM FIRST-NUMBER GIVING RESULT MOVE 00 TO RC WHEN 'M' MULTIPLY FIRST-NUMBER BY SECOND-NUMBER GIVING RESULT MOVE 00 TO RC WHEN 'D' IF SECOND-NUMBER NOT = ZERO DIVIDE FIRST-NUMBER BY SECOND-NUMBER GIVING RESULT MOVE 00 TO RC ELSE MOVE 99 TO RC END-IF WHEN OTHER MOVE 99 TO RC END-EVALUATE EXIT PROGRAM.

Parameter Passing Methods

1. By Reference (Default)

Parameters are passed by reference, meaning the subprogram works with the actual data items from the calling program.

cobol
1
2
3
CALL 'PROCESS-DATA' USING CUSTOMER-RECORD TRANSACTION-AMOUNT RESULT-STATUS.

2. By Content

Parameters are passed by content, creating a copy of the data for the subprogram to use.

cobol
1
2
CALL 'VALIDATE-DATE' USING BY CONTENT INPUT-DATE BY REFERENCE VALIDATION-RESULT.

3. Mixed Parameter Passing

Combine both reference and content parameter passing in a single CALL statement.

cobol
1
2
3
CALL 'PROCESS-ORDER' USING BY REFERENCE ORDER-DATA BY CONTENT PROCESSING-DATE BY REFERENCE ORDER-STATUS.

Error Handling in CALL Statements

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
PROCEDURE DIVISION. CALL-WITH-ERROR-HANDLING. CALL 'FILE-PROCESSOR' USING FILE-DATA ON EXCEPTION DISPLAY 'Error: Subprogram not found' MOVE 99 TO RETURN-CODE NOT ON EXCEPTION IF RETURN-CODE = 00 DISPLAY 'File processing successful' ELSE DISPLAY 'File processing failed' END-IF END-CALL.

Dynamic CALL Statements

Dynamic CALL statements allow program names to be determined at runtime, providing flexibility in program execution.

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
WORKING-STORAGE SECTION. 01 DYNAMIC-PROGRAM-NAME PIC X(20). 01 PROGRAM-SELECTION PIC X(1). 88 REPORT-PROGRAM VALUE 'R'. 88 UPDATE-PROGRAM VALUE 'U'. 88 QUERY-PROGRAM VALUE 'Q'. PROCEDURE DIVISION. DYNAMIC-CALL-PROCESSING. PERFORM SELECT-PROGRAM-NAME CALL DYNAMIC-PROGRAM-NAME USING PARAMETER-LIST ON EXCEPTION DISPLAY 'Program not available: ' DYNAMIC-PROGRAM-NAME END-CALL. SELECT-PROGRAM-NAME. EVALUATE PROGRAM-SELECTION WHEN 'R' MOVE 'GENERATE-REPORT' TO DYNAMIC-PROGRAM-NAME WHEN 'U' MOVE 'UPDATE-RECORDS' TO DYNAMIC-PROGRAM-NAME WHEN 'Q' MOVE 'QUERY-DATABASE' TO DYNAMIC-PROGRAM-NAME WHEN OTHER MOVE 'DEFAULT-PROCESSOR' TO DYNAMIC-PROGRAM-NAME END-EVALUATE.

Nested CALL Statements

CALL statements can be nested, allowing subprograms to call other subprograms, creating a hierarchy of program calls.

cobol
1
2
3
4
5
6
7
8
9
10
11
PROCEDURE DIVISION. NESTED-CALL-EXAMPLE. CALL 'VALIDATE-INPUT' USING INPUT-DATA VALIDATION-RESULT IF VALIDATION-SUCCESSFUL CALL 'PROCESS-DATA' USING INPUT-DATA PROCESSING-RESULT IF PROCESSING-SUCCESSFUL CALL 'GENERATE-OUTPUT' USING PROCESSING-RESULT OUTPUT-DATA END-IF END-IF.

Best Practices for CALL Statements

Common CALL Statement Patterns