The USING clause in the PROCEDURE DIVISION header specifies which LINKAGE SECTION items receive parameters from a calling program. When a program is called with the CALL statement using parameters, those parameters are passed to the items listed in the USING clause. The USING clause connects the calling program's data to the called program's LINKAGE SECTION definitions, enabling efficient parameter passing between COBOL programs.
The USING clause appears in the PROCEDURE DIVISION header and lists the LINKAGE SECTION items that receive parameters. Key characteristics:
1PROCEDURE DIVISION [USING parameter-1 [parameter-2 ...]].
The USING clause lists one or more LINKAGE SECTION items, separated by spaces.
12345678910111213141516171819202122232425262728293031IDENTIFICATION DIVISION. PROGRAM-ID. PROCESS-TRANSACTION. DATA DIVISION. LINKAGE SECTION. 01 INPUT-PARAMETERS. 05 CUSTOMER-ID PIC 9(8). 05 TRANSACTION-AMOUNT PIC 9(9)V99. 05 OPERATION-TYPE PIC X. 01 OUTPUT-PARAMETERS. 05 RETURN-CODE PIC 9(4). 05 RETURN-MESSAGE PIC X(50). 05 NEW-BALANCE PIC 9(9)V99. PROCEDURE DIVISION USING INPUT-PARAMETERS OUTPUT-PARAMETERS. MAIN-LOGIC. *> Access input parameters DISPLAY 'Processing customer: ' CUSTOMER-ID DISPLAY 'Amount: ' TRANSACTION-AMOUNT *> Process transaction PERFORM PROCESS-TRANSACTION-LOGIC *> Set output parameters MOVE 0 TO RETURN-CODE MOVE 'Transaction successful' TO RETURN-MESSAGE MOVE 1500.00 TO NEW-BALANCE EXIT PROGRAM.
The calling program would call it like this:
12345678910111213141516171819202122WORKING-STORAGE SECTION. 01 INPUT-DATA. 05 CUST-ID PIC 9(8) VALUE 12345678. 05 TRANS-AMT PIC 9(9)V99 VALUE 500.00. 05 OP-TYPE PIC X VALUE 'D'. 01 OUTPUT-DATA. 05 RET-CODE PIC 9(4). 05 RET-MESSAGE PIC X(50). 05 NEW-BAL PIC 9(9)V99. PROCEDURE DIVISION. MAIN-PARA. CALL 'PROCESS-TRANSACTION' USING INPUT-DATA OUTPUT-DATA IF RET-CODE = 0 DISPLAY 'Success: ' RET-MESSAGE DISPLAY 'New balance: ' NEW-BAL END-IF STOP RUN.
Parameters are matched by position:
You can specify multiple parameters in the USING clause:
123456789101112131415LINKAGE SECTION. 01 PARAM-1 PIC X(10). 01 PARAM-2 PIC 9(5). 01 PARAM-3 PIC X(20). PROCEDURE DIVISION USING PARAM-1 PARAM-2 PARAM-3. MAIN-LOGIC. *> Access all three parameters DISPLAY 'Param 1: ' PARAM-1 DISPLAY 'Param 2: ' PARAM-2 DISPLAY 'Param 3: ' PARAM-3 EXIT PROGRAM.
Main programs can use USING to receive system parameters:
1234567891011121314IDENTIFICATION DIVISION. PROGRAM-ID. MAIN-PROGRAM. DATA DIVISION. LINKAGE SECTION. 01 SYSTEM-PARM PIC X(100). PROCEDURE DIVISION USING SYSTEM-PARM. MAIN-PARA. *> SYSTEM-PARM receives parameters from JCL PARM *> or operating system DISPLAY 'System parameter: ' SYSTEM-PARM STOP RUN.
Follow these best practices when using USING:
Avoid these common mistakes:
Think of USING like a delivery system:
The USING clause tells the program "these are the mailboxes where I'll receive the packages (parameters) from the sender (calling program)"!
1. Where is the USING clause specified?
2. What must be defined before using items in the USING clause?
3. How are parameters matched between CALL and USING?
4. Can a program have no USING clause?
5. What is the default parameter passing method with USING?