The GLOBAL clause represents a sophisticated data sharing mechanism within COBOL program hierarchies, serving as the primary specification for enabling data visibility and accessibility across nested program structures without requiring explicit parameter passing through linkage sections. This clause embodies the principles of hierarchical data management by providing controlled scope extension capabilities, enabling efficient inter-program communication patterns, and supporting modular programming architectures while maintaining data encapsulation boundaries and ensuring predictable variable access in enterprise applications that require structured program organization, shared data processing, and maintainable code architectures with clear data visibility rules.
12345678910111201 data-name GLOBAL PIC clause. 01 data-name PIC clause GLOBAL. FD file-name GLOBAL. *> Examples: 01 SHARED-COUNTER GLOBAL PIC 9(5) VALUE 0. 01 COMMON-WORK-AREA GLOBAL. 05 STATUS-FLAG PIC X. 05 ERROR-MESSAGE PIC X(50). FD SHARED-FILE GLOBAL.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118IDENTIFICATION DIVISION. PROGRAM-ID. MAIN-PROGRAM. DATA DIVISION. WORKING-STORAGE SECTION. *> Global data accessible to nested programs 01 GLOBAL-CONFIGURATION GLOBAL. 05 APPLICATION-MODE PIC X(10) VALUE 'PRODUCTION'. 05 DEBUG-LEVEL PIC 9 VALUE 1. 05 MAX-RECORDS PIC 9(7) VALUE 1000000. 01 SHARED-COUNTERS GLOBAL. 05 TOTAL-PROCESSED PIC 9(8) VALUE 0. 05 ERROR-COUNT PIC 9(5) VALUE 0. 05 WARNING-COUNT PIC 9(5) VALUE 0. 01 GLOBAL-WORK-AREA GLOBAL. 05 CURRENT-OPERATION PIC X(20). 05 LAST-ERROR-MESSAGE PIC X(80). 05 PROCESSING-DATE PIC 9(8). PROCEDURE DIVISION. MAIN-PROCESSING. MOVE FUNCTION CURRENT-DATE(1:8) TO PROCESSING-DATE MOVE 'INITIALIZATION' TO CURRENT-OPERATION DISPLAY 'Starting main processing...' CALL 'VALIDATION-MODULE' CALL 'PROCESSING-MODULE' CALL 'REPORTING-MODULE' DISPLAY 'Total processed: ' TOTAL-PROCESSED DISPLAY 'Errors: ' ERROR-COUNT DISPLAY 'Warnings: ' WARNING-COUNT STOP RUN. *> Nested program with access to global data IDENTIFICATION DIVISION. PROGRAM-ID. VALIDATION-MODULE. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-COUNTER PIC 9(3). PROCEDURE DIVISION. VALIDATION-PROCESSING. MOVE 'DATA VALIDATION' TO CURRENT-OPERATION *> Access global counters and configuration IF DEBUG-LEVEL > 0 DISPLAY 'Debug: Starting validation in ' APPLICATION-MODE ' mode' END-IF *> Simulate validation processing PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 100 ADD 1 TO TOTAL-PROCESSED *> Simulate occasional errors IF FUNCTION MOD(WS-COUNTER, 25) = 0 ADD 1 TO ERROR-COUNT MOVE 'Validation error in record processing' TO LAST-ERROR-MESSAGE END-IF END-PERFORM EXIT PROGRAM. END PROGRAM VALIDATION-MODULE. IDENTIFICATION DIVISION. PROGRAM-ID. PROCESSING-MODULE. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-COUNTER PIC 9(3). PROCEDURE DIVISION. PROCESSING-LOGIC. MOVE 'RECORD PROCESSING' TO CURRENT-OPERATION *> Access and modify global data PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 200 ADD 1 TO TOTAL-PROCESSED IF TOTAL-PROCESSED > MAX-RECORDS ADD 1 TO WARNING-COUNT MOVE 'Maximum record limit approaching' TO LAST-ERROR-MESSAGE EXIT PERFORM END-IF END-PERFORM EXIT PROGRAM. END PROGRAM PROCESSING-MODULE. IDENTIFICATION DIVISION. PROGRAM-ID. REPORTING-MODULE. PROCEDURE DIVISION. REPORTING-LOGIC. MOVE 'REPORT GENERATION' TO CURRENT-OPERATION *> Generate summary report using global data DISPLAY 'Processing Summary Report' DISPLAY 'Date: ' PROCESSING-DATE DISPLAY 'Mode: ' APPLICATION-MODE DISPLAY 'Records Processed: ' TOTAL-PROCESSED DISPLAY 'Error Count: ' ERROR-COUNT DISPLAY 'Warning Count: ' WARNING-COUNT IF ERROR-COUNT > 0 DISPLAY 'Last Error: ' LAST-ERROR-MESSAGE END-IF EXIT PROGRAM. END PROGRAM REPORTING-MODULE. END PROGRAM MAIN-PROGRAM.
123456789101112131415161718192021*> Main Program 01 SYSTEM-CONFIG GLOBAL. 05 DATABASE-URL PIC X(50) VALUE 'DB.COMPANY.COM'. 05 TIMEOUT-SECONDS PIC 9(3) VALUE 30. 05 RETRY-COUNT PIC 9(2) VALUE 3. 05 LOG-LEVEL PIC 9 VALUE 2. *> Nested Program IDENTIFICATION DIVISION. PROGRAM-ID. DATABASE-MODULE. PROCEDURE DIVISION. *> Access global configuration IF LOG-LEVEL > 1 DISPLAY 'Connecting to: ' DATABASE-URL DISPLAY 'Timeout: ' TIMEOUT-SECONDS ' seconds' END-IF *> Use configuration values PERFORM DATABASE-CONNECT EXIT PROGRAM.
1234567891011121314151617181920*> Global error tracking structure 01 ERROR-TRACKING GLOBAL. 05 ERROR-OCCURRED PIC X VALUE 'N'. 05 ERROR-MODULE PIC X(20). 05 ERROR-CODE PIC 9(4). 05 ERROR-DESCRIPTION PIC X(100). *> Nested program using error tracking IDENTIFICATION DIVISION. PROGRAM-ID. FILE-PROCESSOR. PROCEDURE DIVISION. MOVE 'FILE-PROCESSOR' TO ERROR-MODULE *> Simulate error condition IF FILE-STATUS NOT = '00' MOVE 'Y' TO ERROR-OCCURRED MOVE 1001 TO ERROR-CODE MOVE 'File access error during processing' TO ERROR-DESCRIPTION END-IF.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144IDENTIFICATION DIVISION. PROGRAM-ID. ADVANCED-GLOBAL-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Global application state 01 APPLICATION-STATE GLOBAL. 05 CURRENT-USER-ID PIC X(10). 05 SESSION-TOKEN PIC X(32). 05 TRANSACTION-ID PIC 9(10). 05 PROCESSING-STAGE PIC 9(2) VALUE 1. *> Global performance metrics 01 PERFORMANCE-METRICS GLOBAL. 05 START-TIME PIC 9(8). 05 END-TIME PIC 9(8). 05 RECORDS-PER-SECOND PIC 9(5)V99. 05 MEMORY-USAGE PIC 9(7). *> Global business rules 01 BUSINESS-RULES GLOBAL. 05 MIN-ORDER-AMOUNT PIC 9(7)V99 VALUE 10.00. 05 MAX-DISCOUNT-PCT PIC 9(2)V99 VALUE 25.00. 05 TAX-RATE PIC 9V9999 VALUE 0.0825. 05 SHIPPING-THRESHOLD PIC 9(5)V99 VALUE 100.00. *> Global audit trail 01 AUDIT-TRAIL GLOBAL. 05 AUDIT-ENTRIES OCCURS 100 TIMES. 10 AUDIT-TIMESTAMP PIC 9(14). 10 AUDIT-USER PIC X(10). 10 AUDIT-ACTION PIC X(20). 10 AUDIT-DETAILS PIC X(100). 05 AUDIT-COUNTER PIC 9(3) VALUE 0. PROCEDURE DIVISION. MAIN-PROCESSING. MOVE 'USER001' TO CURRENT-USER-ID MOVE FUNCTION CURRENT-DATE(9:6) TO START-TIME MOVE 1001 TO TRANSACTION-ID CALL 'AUTHENTICATION-MODULE' CALL 'ORDER-PROCESSING-MODULE' CALL 'AUDIT-MODULE' STOP RUN. *> Authentication module with global state access IDENTIFICATION DIVISION. PROGRAM-ID. AUTHENTICATION-MODULE. PROCEDURE DIVISION. AUTHENTICATION-LOGIC. MOVE 'AUTHENTICATION' TO AUDIT-ACTION ADD 1 TO AUDIT-COUNTER MOVE FUNCTION CURRENT-DATE TO AUDIT-TIMESTAMP(AUDIT-COUNTER) MOVE CURRENT-USER-ID TO AUDIT-USER(AUDIT-COUNTER) MOVE 'User authentication successful' TO AUDIT-DETAILS(AUDIT-COUNTER) *> Generate session token STRING 'TOKEN' DELIMITED BY SIZE CURRENT-USER-ID DELIMITED BY SPACE TRANSACTION-ID DELIMITED BY SIZE INTO SESSION-TOKEN MOVE 2 TO PROCESSING-STAGE EXIT PROGRAM. END PROGRAM AUTHENTICATION-MODULE. *> Order processing with business rules IDENTIFICATION DIVISION. PROGRAM-ID. ORDER-PROCESSING-MODULE. DATA DIVISION. WORKING-STORAGE SECTION. 01 ORDER-DATA. 05 ORDER-AMOUNT PIC 9(7)V99. 05 DISCOUNT-AMOUNT PIC 9(5)V99. 05 TAX-AMOUNT PIC 9(5)V99. 05 SHIPPING-AMOUNT PIC 9(3)V99. 05 TOTAL-AMOUNT PIC 9(8)V99. PROCEDURE DIVISION. ORDER-PROCESSING-LOGIC. MOVE 'ORDER-PROCESSING' TO AUDIT-ACTION ADD 1 TO AUDIT-COUNTER MOVE FUNCTION CURRENT-DATE TO AUDIT-TIMESTAMP(AUDIT-COUNTER) MOVE CURRENT-USER-ID TO AUDIT-USER(AUDIT-COUNTER) *> Apply business rules using global data IF ORDER-AMOUNT < MIN-ORDER-AMOUNT MOVE 'Order below minimum amount' TO AUDIT-DETAILS(AUDIT-COUNTER) EXIT PROGRAM END-IF *> Calculate tax using global rate MULTIPLY ORDER-AMOUNT BY TAX-RATE GIVING TAX-AMOUNT *> Apply shipping rules IF ORDER-AMOUNT >= SHIPPING-THRESHOLD MOVE 0 TO SHIPPING-AMOUNT ELSE MOVE 9.99 TO SHIPPING-AMOUNT END-IF ADD ORDER-AMOUNT TAX-AMOUNT SHIPPING-AMOUNT GIVING TOTAL-AMOUNT MOVE 'Order processed successfully' TO AUDIT-DETAILS(AUDIT-COUNTER) MOVE 3 TO PROCESSING-STAGE EXIT PROGRAM. END PROGRAM ORDER-PROCESSING-MODULE. *> Audit module for logging IDENTIFICATION DIVISION. PROGRAM-ID. AUDIT-MODULE. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-INDEX PIC 9(3). PROCEDURE DIVISION. AUDIT-PROCESSING. MOVE FUNCTION CURRENT-DATE(9:6) TO END-TIME DISPLAY 'Audit Trail Summary:' DISPLAY 'Transaction ID: ' TRANSACTION-ID DISPLAY 'User: ' CURRENT-USER-ID DISPLAY 'Processing Stage: ' PROCESSING-STAGE DISPLAY 'Start Time: ' START-TIME DISPLAY 'End Time: ' END-TIME DISPLAY 'Audit Entries:' PERFORM VARYING WS-INDEX FROM 1 BY 1 UNTIL WS-INDEX > AUDIT-COUNTER DISPLAY WS-INDEX ': ' AUDIT-TIMESTAMP(WS-INDEX) ' - ' AUDIT-ACTION(WS-INDEX) ' - ' AUDIT-DETAILS(WS-INDEX) END-PERFORM EXIT PROGRAM. END PROGRAM AUDIT-MODULE. END PROGRAM ADVANCED-GLOBAL-DEMO.
How do you declare a global data item in COBOL?
Answer: 01 data-name GLOBAL PIC clause. or 01 data-name PIC clause GLOBAL.
Which programs can access GLOBAL data items?
Answer: All nested programs within the program hierarchy where the GLOBAL data is declared can access it directly without parameter passing.
When should you use GLOBAL data instead of parameter passing?
Answer: Use GLOBAL for configuration data, shared state, and data that multiple nested programs need to access. Avoid for simple parameter passing or when data encapsulation is important.
1234567801 APP-CONFIG GLOBAL. 05 DATABASE-NAME PIC X(20). 05 MAX-CONNECTIONS PIC 9(3). 05 TIMEOUT-VALUE PIC 9(5). 05 DEBUG-MODE PIC X VALUE 'N'. *> All nested programs can access *> configuration without parameters
123456701 PROCESS-STATE GLOBAL. 05 CURRENT-STEP PIC 9(2). 05 ERROR-FLAG PIC X VALUE 'N'. 05 RECORDS-PROCESSED PIC 9(8). 05 LAST-OPERATION PIC X(20). *> Shared state across all modules