The OMITTED keyword in COBOL is used to indicate that a parameter is intentionally not passed when calling a subprogram. This allows for flexible parameter passing where some arguments can be skipped while maintaining the correct parameter position sequence. It's particularly useful in programs that need to support optional parameters or backward compatibility.
CALL program-name USING [BY REFERENCE|BY CONTENT|BY VALUE]
{ parameter-1 | OMITTED }
{ parameter-2 | OMITTED }
...
{ parameter-n | OMITTED }CALL "SUBPROG1" USING
WS-PARAM-1
OMITTED
WS-PARAM-3.Omitting the second parameter while passing first and third.
CALL "CALCULATOR" USING
WS-OPERATION
WS-NUMBER-1
OMITTED
OMITTED
WS-RESULT.Omitting multiple consecutive parameters.
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN-PROG.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NAME PIC X(30) VALUE "JOHN DOE".
01 WS-ADDRESS PIC X(50) VALUE "123 MAIN ST".
01 WS-PHONE PIC X(15) VALUE "555-1234".
01 WS-EMAIL PIC X(50) VALUE "john@email.com".
PROCEDURE DIVISION.
CALL "PROCESS-CUSTOMER" USING
WS-NAME
WS-ADDRESS
OMITTED *> Skip phone number
WS-EMAIL.
CALL "PROCESS-CUSTOMER" USING
WS-NAME
OMITTED *> Skip address
WS-PHONE
OMITTED. *> Skip email
STOP RUN.Main program calling subprogram with different parameter combinations.
IDENTIFICATION DIVISION.
PROGRAM-ID. PROCESS-CUSTOMER.
DATA DIVISION.
LINKAGE SECTION.
01 L-NAME PIC X(30).
01 L-ADDRESS PIC X(50).
01 L-PHONE PIC X(15).
01 L-EMAIL PIC X(50).
PROCEDURE DIVISION USING
L-NAME
L-ADDRESS
L-PHONE
L-EMAIL.
IF L-NAME NOT = SPACES
DISPLAY "PROCESSING NAME: " L-NAME
END-IF.
IF L-ADDRESS NOT = SPACES
DISPLAY "ADDRESS: " L-ADDRESS
END-IF.
IF L-PHONE NOT = SPACES
DISPLAY "PHONE: " L-PHONE
END-IF.
IF L-EMAIL NOT = SPACES
DISPLAY "EMAIL: " L-EMAIL
END-IF.
EXIT PROGRAM.Subprogram handling potentially omitted parameters.
IDENTIFICATION DIVISION.
PROGRAM-ID. PARAM-TEST.
DATA DIVISION.
LINKAGE SECTION.
01 L-REQUIRED-PARAM PIC X(20).
01 L-OPTIONAL-PARAM-1 PIC 9(6).
01 L-OPTIONAL-PARAM-2 PIC X(10).
PROCEDURE DIVISION USING
L-REQUIRED-PARAM
L-OPTIONAL-PARAM-1
L-OPTIONAL-PARAM-2.
DISPLAY "REQUIRED PARAM: " L-REQUIRED-PARAM.
*> Check if numeric parameter was omitted
IF L-OPTIONAL-PARAM-1 IS NUMERIC
DISPLAY "OPTIONAL PARAM 1: " L-OPTIONAL-PARAM-1
ELSE
DISPLAY "OPTIONAL PARAM 1 WAS OMITTED"
END-IF.
*> Check if string parameter was omitted
IF L-OPTIONAL-PARAM-2 NOT = LOW-VALUES
AND L-OPTIONAL-PARAM-2 NOT = SPACES
DISPLAY "OPTIONAL PARAM 2: " L-OPTIONAL-PARAM-2
ELSE
DISPLAY "OPTIONAL PARAM 2 WAS OMITTED"
END-IF.
EXIT PROGRAM.Checking for omitted parameters in the called program.
CALL "UPDATE-RECORD" USING
BY REFERENCE WS-RECORD-KEY
BY REFERENCE OMITTED
BY REFERENCE WS-UPDATE-FLAG.Using OMITTED with BY REFERENCE parameters.
CALL "VALIDATE-DATA" USING
BY CONTENT WS-INPUT-DATA
BY CONTENT OMITTED
BY CONTENT WS-VALIDATION-LEVEL.Using OMITTED with BY CONTENT parameters.
CALL "COMPLEX-PROCESS" USING
BY REFERENCE WS-INPUT-BUFFER
BY CONTENT WS-PROCESS-CODE
BY REFERENCE OMITTED
BY VALUE LENGTH OF WS-INPUT-BUFFER
BY CONTENT OMITTED.Mixing different parameter passing methods with OMITTED.
IDENTIFICATION DIVISION.
PROGRAM-ID. FLEXIBLE-PROCESSOR.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-CONFIG-FLAGS.
05 WS-PROCESS-HEADER-FLAG PIC X VALUE 'Y'.
05 WS-PROCESS-DETAIL-FLAG PIC X VALUE 'N'.
05 WS-PROCESS-FOOTER-FLAG PIC X VALUE 'Y'.
01 WS-HEADER-DATA PIC X(100).
01 WS-DETAIL-DATA PIC X(200).
01 WS-FOOTER-DATA PIC X(50).
PROCEDURE DIVISION.
EVALUATE TRUE
WHEN WS-PROCESS-HEADER-FLAG = 'Y' AND
WS-PROCESS-DETAIL-FLAG = 'Y' AND
WS-PROCESS-FOOTER-FLAG = 'Y'
CALL "PROCESS-ALL" USING
WS-HEADER-DATA
WS-DETAIL-DATA
WS-FOOTER-DATA
WHEN WS-PROCESS-HEADER-FLAG = 'Y' AND
WS-PROCESS-DETAIL-FLAG = 'N' AND
WS-PROCESS-FOOTER-FLAG = 'Y'
CALL "PROCESS-ALL" USING
WS-HEADER-DATA
OMITTED
WS-FOOTER-DATA
WHEN OTHER
CALL "PROCESS-ALL" USING
OMITTED
OMITTED
OMITTED
END-EVALUATE.Using OMITTED for flexible, configuration-driven processing.
* Old program calls - still work
CALL "LEGACY-ROUTINE" USING
WS-PARAM-1
WS-PARAM-2.
* New program calls - with additional parameters
CALL "LEGACY-ROUTINE" USING
WS-PARAM-1
WS-PARAM-2
WS-NEW-PARAM-3
OMITTED *> Reserved for future use
WS-NEW-PARAM-5.
* Minimal call - only required parameters
CALL "LEGACY-ROUTINE" USING
WS-PARAM-1
OMITTED.Maintaining backward compatibility while extending functionality.
* Call with all options
CALL "FILE-PROCESSOR" USING
WS-FILENAME
WS-DEBUG-FLAG
WS-BACKUP-FLAG
WS-VALIDATE-FLAG.
* Call with minimal options
CALL "FILE-PROCESSOR" USING
WS-FILENAME
OMITTED *> No debug
OMITTED *> No backup
OMITTED. *> No validationUsing OMITTED for optional flag parameters.
* Full output requested
CALL "DATA-ANALYZER" USING
WS-INPUT-DATA
WS-SUMMARY-OUTPUT
WS-DETAIL-OUTPUT
WS-ERROR-OUTPUT.
* Only summary needed
CALL "DATA-ANALYZER" USING
WS-INPUT-DATA
WS-SUMMARY-OUTPUT
OMITTED *> No details needed
OMITTED. *> No error details neededOmitting output parameters when not needed.
Primary statement for invoking subprograms
Data area for parameters in called programs
Parameter passing method that passes memory address
Parameter passing method that passes a copy of data