The DEFAULT clause in COBOL provides a mechanism for specifying default values and initialization behavior for data items, ensuring predictable initial states and reducing programming errors.
The DEFAULT clause can be used in various contexts to specify default values for data items when explicit initialization is not provided.
12345678910111213141516171819202122232425262728DATA DIVISION. WORKING-STORAGE SECTION. *> Basic DEFAULT usage 01 WS-COUNTER PIC 9(3) DEFAULT 0. 01 WS-STATUS-FLAG PIC X DEFAULT 'N'. 01 WS-AMOUNT PIC 9(5)V99 DEFAULT 0.00. 01 WS-NAME PIC X(20) DEFAULT SPACES. 01 WS-DATE PIC X(8) DEFAULT '00000000'. *> Group items with DEFAULT 01 WS-EMPLOYEE-RECORD DEFAULT SPACES. 05 WS-EMP-ID PIC X(5). 05 WS-EMP-NAME PIC X(25). 05 WS-EMP-SALARY PIC 9(6)V99 DEFAULT 0. *> Array with DEFAULT 01 WS-MONTHLY-TOTALS OCCURS 12 TIMES PIC 9(8)V99 DEFAULT 0. PROCEDURE DIVISION. MAIN-PROCESSING. DISPLAY "Counter: " WS-COUNTER DISPLAY "Status: " WS-STATUS-FLAG DISPLAY "Amount: " WS-AMOUNT DISPLAY "Name: '" WS-NAME "'" DISPLAY "Employee ID: '" WS-EMP-ID "'" DISPLAY "Monthly Total 1: " WS-MONTHLY-TOTALS(1).
12345678910111213141516171819202122232425262728293031323334353637383940414243444546DATA DIVISION. WORKING-STORAGE SECTION. *> Integer defaults 01 WS-QUANTITIES. 05 WS-ITEM-COUNT PIC 9(4) DEFAULT 0. 05 WS-TOTAL-ITEMS PIC 9(6) DEFAULT 0. 05 WS-ERROR-COUNT PIC 9(3) DEFAULT 0. *> Decimal defaults 01 WS-FINANCIAL-DATA. 05 WS-PRICE PIC 9(6)V99 DEFAULT 0.00. 05 WS-TAX-RATE PIC 9V999 DEFAULT 0.000. 05 WS-DISCOUNT PIC 9V99 DEFAULT 0.00. *> Signed numeric defaults 01 WS-CALCULATIONS. 05 WS-BALANCE PIC S9(8)V99 DEFAULT +0.00. 05 WS-ADJUSTMENT PIC S9(6)V99 DEFAULT +0.00. 05 WS-NET-AMOUNT PIC S9(8)V99 DEFAULT +0.00. *> Computational defaults 01 WS-COMP-FIELDS. 05 WS-INDEX PIC 9(4) COMP DEFAULT 1. 05 WS-POINTER PIC 9(8) COMP DEFAULT 0. 05 WS-BINARY-FLAG PIC 9 COMP DEFAULT 0. PROCEDURE DIVISION. DEMONSTRATE-NUMERIC-DEFAULTS. DISPLAY "=== Numeric Defaults Demo ===" DISPLAY "Item Count: " WS-ITEM-COUNT DISPLAY "Price: " WS-PRICE DISPLAY "Tax Rate: " WS-TAX-RATE DISPLAY "Balance: " WS-BALANCE DISPLAY "Index: " WS-INDEX *> Modify values to show they can be changed MOVE 100 TO WS-ITEM-COUNT MOVE 25.99 TO WS-PRICE COMPUTE WS-BALANCE = WS-PRICE * WS-ITEM-COUNT DISPLAY "After modifications:" DISPLAY "Item Count: " WS-ITEM-COUNT DISPLAY "Price: " WS-PRICE DISPLAY "Balance: " WS-BALANCE.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849DATA DIVISION. WORKING-STORAGE SECTION. *> Character string defaults 01 WS-STRING-FIELDS. 05 WS-CUSTOMER-NAME PIC X(30) DEFAULT SPACES. 05 WS-PRODUCT-CODE PIC X(10) DEFAULT 'UNKNOWN'. 05 WS-STATUS-MSG PIC X(50) DEFAULT 'READY'. 05 WS-ERROR-MSG PIC X(80) DEFAULT 'NO ERROR'. *> Fixed-length alphanumeric 01 WS-CODES. 05 WS-REGION-CODE PIC X(2) DEFAULT 'XX'. 05 WS-DEPT-CODE PIC X(3) DEFAULT '000'. 05 WS-CLASS-CODE PIC X(1) DEFAULT 'A'. *> Mixed alphanumeric 01 WS-FORMATTED-FIELDS. 05 WS-PHONE-NUMBER PIC X(12) DEFAULT '000-000-0000'. 05 WS-SSN PIC X(11) DEFAULT '000-00-0000'. 05 WS-ZIP-CODE PIC X(10) DEFAULT '00000-0000'. *> Variable-length handling 01 WS-VARIABLE-DATA. 05 WS-DESCRIPTION PIC X(100) DEFAULT SPACES. 05 WS-COMMENTS PIC X(200) DEFAULT SPACES. 05 WS-NOTES PIC X(500) DEFAULT SPACES. PROCEDURE DIVISION. DEMONSTRATE-ALPHA-DEFAULTS. DISPLAY "=== Alphanumeric Defaults Demo ===" DISPLAY "Customer Name: '" WS-CUSTOMER-NAME "'" DISPLAY "Product Code: '" WS-PRODUCT-CODE "'" DISPLAY "Status Message: '" WS-STATUS-MSG "'" DISPLAY "Region Code: '" WS-REGION-CODE "'" DISPLAY "Phone Number: '" WS-PHONE-NUMBER "'" *> Assign new values MOVE "JOHN SMITH" TO WS-CUSTOMER-NAME MOVE "PROD001" TO WS-PRODUCT-CODE MOVE "NY" TO WS-REGION-CODE MOVE "555-123-4567" TO WS-PHONE-NUMBER DISPLAY "After assignments:" DISPLAY "Customer Name: '" WS-CUSTOMER-NAME "'" DISPLAY "Product Code: '" WS-PRODUCT-CODE "'" DISPLAY "Region Code: '" WS-REGION-CODE "'" DISPLAY "Phone Number: '" WS-PHONE-NUMBER "'".
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970DATA DIVISION. WORKING-STORAGE SECTION. *> Group with overall default 01 WS-CUSTOMER-RECORD DEFAULT SPACES. 05 WS-CUST-ID PIC X(8). 05 WS-CUST-NAME PIC X(25). 05 WS-CUST-ADDRESS. 10 WS-STREET PIC X(30). 10 WS-CITY PIC X(20). 10 WS-STATE PIC X(2). 10 WS-ZIP PIC X(5). 05 WS-CUST-PHONE PIC X(12). *> Group with individual defaults 01 WS-ORDER-RECORD. 05 WS-ORDER-ID PIC X(10) DEFAULT 'ORD0000000'. 05 WS-ORDER-DATE PIC X(8) DEFAULT '00000000'. 05 WS-ORDER-STATUS PIC X(1) DEFAULT 'P'. 05 WS-ORDER-AMOUNT PIC 9(8)V99 DEFAULT 0.00. 05 WS-ORDER-ITEMS OCCURS 10 TIMES. 10 WS-ITEM-CODE PIC X(8) DEFAULT SPACES. 10 WS-ITEM-QTY PIC 9(3) DEFAULT 0. 10 WS-ITEM-PRICE PIC 9(6)V99 DEFAULT 0.00. *> Nested group defaults 01 WS-EMPLOYEE-DATA. 05 WS-PERSONAL-INFO DEFAULT SPACES. 10 WS-FIRST-NAME PIC X(15). 10 WS-LAST-NAME PIC X(20). 10 WS-MIDDLE-INIT PIC X(1). 05 WS-JOB-INFO. 10 WS-DEPT-NUM PIC 9(3) DEFAULT 0. 10 WS-JOB-TITLE PIC X(25) DEFAULT 'UNASSIGNED'. 10 WS-SALARY PIC 9(6)V99 DEFAULT 0.00. 10 WS-HIRE-DATE PIC X(8) DEFAULT '00000000'. PROCEDURE DIVISION. DEMONSTRATE-GROUP-DEFAULTS. DISPLAY "=== Group Item Defaults Demo ===" *> Display initial values DISPLAY "Customer ID: '" WS-CUST-ID "'" DISPLAY "Customer Name: '" WS-CUST-NAME "'" DISPLAY "Street: '" WS-STREET "'" DISPLAY "Order ID: '" WS-ORDER-ID "'" DISPLAY "Order Status: '" WS-ORDER-STATUS "'" DISPLAY "Order Amount: " WS-ORDER-AMOUNT DISPLAY "First Name: '" WS-FIRST-NAME "'" DISPLAY "Department: " WS-DEPT-NUM DISPLAY "Job Title: '" WS-JOB-TITLE "'" *> Initialize with specific values MOVE "CUST0001" TO WS-CUST-ID MOVE "ACME CORPORATION" TO WS-CUST-NAME MOVE "123 MAIN ST" TO WS-STREET MOVE "ANYTOWN" TO WS-CITY MOVE "NY" TO WS-STATE MOVE "12345" TO WS-ZIP MOVE "ORD0000123" TO WS-ORDER-ID MOVE "A" TO WS-ORDER-STATUS MOVE 1250.75 TO WS-ORDER-AMOUNT DISPLAY "After initialization:" DISPLAY "Customer: " WS-CUST-NAME DISPLAY "Address: " WS-STREET ", " WS-CITY ", " WS-STATE " " WS-ZIP DISPLAY "Order: " WS-ORDER-ID " Amount: " WS-ORDER-AMOUNT.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485DATA DIVISION. WORKING-STORAGE SECTION. *> Simple array with default 01 WS-MONTHLY-SALES OCCURS 12 TIMES PIC 9(8)V99 DEFAULT 0.00. *> Multi-dimensional array 01 WS-QUARTERLY-DATA. 05 WS-QUARTER OCCURS 4 TIMES. 10 WS-MONTH OCCURS 3 TIMES PIC 9(8)V99 DEFAULT 0.00. *> Array of structures with defaults 01 WS-PRODUCT-TABLE. 05 WS-PRODUCTS OCCURS 100 TIMES. 10 WS-PROD-ID PIC X(8) DEFAULT SPACES. 10 WS-PROD-NAME PIC X(30) DEFAULT SPACES. 10 WS-PROD-PRICE PIC 9(6)V99 DEFAULT 0.00. 10 WS-PROD-QTY PIC 9(4) DEFAULT 0. 10 WS-PROD-STATUS PIC X(1) DEFAULT 'I'. *> Variable-length table 01 WS-DYNAMIC-TABLE. 05 WS-TABLE-SIZE PIC 9(3) DEFAULT 0. 05 WS-TABLE-ENTRIES OCCURS 0 TO 999 TIMES DEPENDING ON WS-TABLE-SIZE. 10 WS-ENTRY-ID PIC X(10) DEFAULT SPACES. 10 WS-ENTRY-VALUE PIC 9(8)V99 DEFAULT 0.00. *> Counter and control fields 01 WS-ARRAY-CONTROLS. 05 WS-CURRENT-INDEX PIC 9(3) DEFAULT 1. 05 WS-MAX-ENTRIES PIC 9(3) DEFAULT 0. 05 WS-TOTAL-VALUE PIC 9(10)V99 DEFAULT 0.00. PROCEDURE DIVISION. DEMONSTRATE-ARRAY-DEFAULTS. DISPLAY "=== Array Defaults Demo ===" *> Display initial array values DISPLAY "Monthly Sales (first 3 months):" DISPLAY " Month 1: " WS-MONTHLY-SALES(1) DISPLAY " Month 2: " WS-MONTHLY-SALES(2) DISPLAY " Month 3: " WS-MONTHLY-SALES(3) DISPLAY "Product 1 defaults:" DISPLAY " ID: '" WS-PROD-ID(1) "'" DISPLAY " Name: '" WS-PROD-NAME(1) "'" DISPLAY " Price: " WS-PROD-PRICE(1) DISPLAY " Quantity: " WS-PROD-QTY(1) DISPLAY " Status: '" WS-PROD-STATUS(1) "'" *> Populate some array elements MOVE 15000.50 TO WS-MONTHLY-SALES(1) MOVE 18750.25 TO WS-MONTHLY-SALES(2) MOVE 22100.00 TO WS-MONTHLY-SALES(3) MOVE "PROD0001" TO WS-PROD-ID(1) MOVE "LAPTOP COMPUTER" TO WS-PROD-NAME(1) MOVE 1299.99 TO WS-PROD-PRICE(1) MOVE 25 TO WS-PROD-QTY(1) MOVE "A" TO WS-PROD-STATUS(1) DISPLAY "After population:" DISPLAY "Monthly Sales (first 3 months):" DISPLAY " Month 1: " WS-MONTHLY-SALES(1) DISPLAY " Month 2: " WS-MONTHLY-SALES(2) DISPLAY " Month 3: " WS-MONTHLY-SALES(3) DISPLAY "Product 1:" DISPLAY " " WS-PROD-ID(1) " " WS-PROD-NAME(1) DISPLAY " Price: " WS-PROD-PRICE(1) " Qty: " WS-PROD-QTY(1) *> Calculate totals PERFORM CALCULATE-TOTALS. CALCULATE-TOTALS. MOVE 0 TO WS-TOTAL-VALUE PERFORM VARYING WS-CURRENT-INDEX FROM 1 BY 1 UNTIL WS-CURRENT-INDEX > 12 ADD WS-MONTHLY-SALES(WS-CURRENT-INDEX) TO WS-TOTAL-VALUE END-PERFORM DISPLAY "Total Sales for Year: " WS-TOTAL-VALUE.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071DATA DIVISION. WORKING-STORAGE SECTION. *> Configuration-based defaults 01 WS-CONFIG-FLAGS. 05 WS-DEBUG-MODE PIC X(1) DEFAULT 'N'. 05 WS-TEST-MODE PIC X(1) DEFAULT 'N'. 05 WS-PROD-MODE PIC X(1) DEFAULT 'Y'. 01 WS-ENVIRONMENT-DEFAULTS. 05 WS-LOG-LEVEL PIC 9(1) DEFAULT 3. 05 WS-MAX-RETRIES PIC 9(2) DEFAULT 3. 05 WS-TIMEOUT-SECS PIC 9(3) DEFAULT 30. 05 WS-BATCH-SIZE PIC 9(4) DEFAULT 1000. *> Business rule defaults 01 WS-BUSINESS-DEFAULTS. 05 WS-TAX-RATE PIC 9V999 DEFAULT 0.085. 05 WS-DISCOUNT-RATE PIC 9V999 DEFAULT 0.000. 05 WS-SHIPPING-COST PIC 9(4)V99 DEFAULT 9.95. 05 WS-MIN-ORDER PIC 9(6)V99 DEFAULT 25.00. *> Date and time defaults 01 WS-DATETIME-DEFAULTS. 05 WS-CURRENT-DATE PIC X(8) DEFAULT '00000000'. 05 WS-CURRENT-TIME PIC X(6) DEFAULT '000000'. 05 WS-EXPIRY-DATE PIC X(8) DEFAULT '99999999'. 05 WS-START-TIME PIC X(6) DEFAULT '080000'. 05 WS-END-TIME PIC X(6) DEFAULT '170000'. PROCEDURE DIVISION. APPLY-CONDITIONAL-DEFAULTS. DISPLAY "=== Conditional Defaults Demo ===" *> Apply environment-specific defaults IF WS-DEBUG-MODE = 'Y' MOVE 1 TO WS-LOG-LEVEL MOVE 10 TO WS-MAX-RETRIES MOVE 300 TO WS-TIMEOUT-SECS DISPLAY "Debug mode defaults applied" ELSE IF WS-TEST-MODE = 'Y' MOVE 2 TO WS-LOG-LEVEL MOVE 5 TO WS-MAX-RETRIES MOVE 60 TO WS-TIMEOUT-SECS MOVE 100 TO WS-BATCH-SIZE DISPLAY "Test mode defaults applied" ELSE DISPLAY "Production mode defaults in effect" END-IF *> Apply business rule defaults based on conditions ACCEPT WS-CURRENT-DATE FROM DATE YYYYMMDD *> Seasonal discount adjustments IF WS-CURRENT-DATE(5:2) = "12" *> December MOVE 0.15 TO WS-DISCOUNT-RATE DISPLAY "Holiday discount rate applied: " WS-DISCOUNT-RATE ELSE IF WS-CURRENT-DATE(5:2) = "07" *> July MOVE 0.10 TO WS-DISCOUNT-RATE DISPLAY "Summer discount rate applied: " WS-DISCOUNT-RATE ELSE DISPLAY "Standard discount rate: " WS-DISCOUNT-RATE END-IF DISPLAY "Configuration:" DISPLAY " Log Level: " WS-LOG-LEVEL DISPLAY " Max Retries: " WS-MAX-RETRIES DISPLAY " Timeout: " WS-TIMEOUT-SECS " seconds" DISPLAY " Batch Size: " WS-BATCH-SIZE DISPLAY " Tax Rate: " WS-TAX-RATE DISPLAY " Discount Rate: " WS-DISCOUNT-RATE.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-VALIDATION-FIELDS. 05 WS-INPUT-VALUE PIC X(20) DEFAULT SPACES. 05 WS-NUMERIC-VALUE PIC 9(8)V99 DEFAULT 0.00. 05 WS-VALIDATION-FLAG PIC X(1) DEFAULT 'N'. 05 WS-ERROR-MESSAGE PIC X(80) DEFAULT SPACES. 01 WS-DEFAULT-RANGES. 05 WS-MIN-VALUE PIC 9(8)V99 DEFAULT 0.01. 05 WS-MAX-VALUE PIC 9(8)V99 DEFAULT 999999.99. 05 WS-DEFAULT-VALUE PIC 9(8)V99 DEFAULT 100.00. 01 WS-VALIDATION-COUNTERS. 05 WS-VALID-COUNT PIC 9(5) DEFAULT 0. 05 WS-INVALID-COUNT PIC 9(5) DEFAULT 0. 05 WS-DEFAULT-COUNT PIC 9(5) DEFAULT 0. PROCEDURE DIVISION. VALIDATE-WITH-DEFAULTS. DISPLAY "=== Default Validation Demo ===" *> Simulate input validation with defaults PERFORM TEST-VALIDATION-SCENARIOS. TEST-VALIDATION-SCENARIOS. *> Test case 1: Empty input - use default MOVE SPACES TO WS-INPUT-VALUE PERFORM VALIDATE-INPUT *> Test case 2: Valid input MOVE "250.75" TO WS-INPUT-VALUE PERFORM VALIDATE-INPUT *> Test case 3: Invalid input - use default MOVE "INVALID" TO WS-INPUT-VALUE PERFORM VALIDATE-INPUT *> Test case 4: Out of range - use default MOVE "9999999.99" TO WS-INPUT-VALUE PERFORM VALIDATE-INPUT DISPLAY "Validation Summary:" DISPLAY " Valid inputs: " WS-VALID-COUNT DISPLAY " Invalid inputs: " WS-INVALID-COUNT DISPLAY " Defaults used: " WS-DEFAULT-COUNT. VALIDATE-INPUT. MOVE 'N' TO WS-VALIDATION-FLAG MOVE SPACES TO WS-ERROR-MESSAGE *> Check if input is empty IF WS-INPUT-VALUE = SPACES MOVE WS-DEFAULT-VALUE TO WS-NUMERIC-VALUE MOVE 'Empty input - using default' TO WS-ERROR-MESSAGE ADD 1 TO WS-DEFAULT-COUNT MOVE 'Y' TO WS-VALIDATION-FLAG ELSE *> Try to convert to numeric IF WS-INPUT-VALUE IS NUMERIC MOVE FUNCTION NUMVAL(WS-INPUT-VALUE) TO WS-NUMERIC-VALUE *> Validate range IF WS-NUMERIC-VALUE < WS-MIN-VALUE OR WS-NUMERIC-VALUE > WS-MAX-VALUE MOVE WS-DEFAULT-VALUE TO WS-NUMERIC-VALUE MOVE 'Out of range - using default' TO WS-ERROR-MESSAGE ADD 1 TO WS-DEFAULT-COUNT ELSE MOVE 'Valid input accepted' TO WS-ERROR-MESSAGE ADD 1 TO WS-VALID-COUNT END-IF MOVE 'Y' TO WS-VALIDATION-FLAG ELSE MOVE WS-DEFAULT-VALUE TO WS-NUMERIC-VALUE MOVE 'Invalid format - using default' TO WS-ERROR-MESSAGE ADD 1 TO WS-INVALID-COUNT ADD 1 TO WS-DEFAULT-COUNT MOVE 'Y' TO WS-VALIDATION-FLAG END-IF END-IF DISPLAY "Input: '" WS-INPUT-VALUE "' -> " WS-NUMERIC-VALUE DISPLAY "Message: " WS-ERROR-MESSAGE.
12345678910111213141516171819202122232425262728293031*> Standard default patterns DATA DIVISION. WORKING-STORAGE SECTION. *> Counters and flags 01 WS-CONTROL-FIELDS. 05 WS-RECORD-COUNT PIC 9(6) DEFAULT 0. 05 WS-ERROR-FLAG PIC X(1) DEFAULT 'N'. 05 WS-EOF-FLAG PIC X(1) DEFAULT 'N'. 05 WS-PROCESS-FLAG PIC X(1) DEFAULT 'Y'. *> Business data with safe defaults 01 WS-TRANSACTION-DATA. 05 WS-TRANS-ID PIC X(10) DEFAULT 'TRANS00000'. 05 WS-TRANS-DATE PIC X(8) DEFAULT '00000000'. 05 WS-TRANS-AMOUNT PIC 9(8)V99 DEFAULT 0.00. 05 WS-TRANS-TYPE PIC X(1) DEFAULT 'U'. *> Configuration with environment awareness 01 WS-CONFIG-SETTINGS. 05 WS-ENVIRONMENT PIC X(4) DEFAULT 'PROD'. 05 WS-LOG-ENABLED PIC X(1) DEFAULT 'Y'. 05 WS-DEBUG-LEVEL PIC 9(1) DEFAULT 0. 05 WS-MAX-RECORDS PIC 9(6) DEFAULT 10000. *> Error handling defaults 01 WS-ERROR-HANDLING. 05 WS-ERROR-CODE PIC X(4) DEFAULT '0000'. 05 WS-ERROR-MESSAGE PIC X(100) DEFAULT SPACES. 05 WS-ERROR-SEVERITY PIC X(1) DEFAULT 'I'. 05 WS-ERROR-COUNT PIC 9(3) DEFAULT 0.