MainframeMaster

COBOL Tutorial

COBOL GLOBAL Clause

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.

Syntax and Usage

GLOBAL Clause Syntax
cobol
1
2
3
4
5
6
7
8
9
10
11
12
01 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.
Data Sharing
Program Hierarchy
Scope Management

Basic GLOBAL Examples

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
IDENTIFICATION 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.

Key Features and Benefits

Hierarchical Data Sharing
  • • Automatic data visibility
  • • No parameter passing required
  • • Simplified program interfaces
  • • Reduced linkage complexity
Modular Programming
  • • Nested program support
  • • Shared configuration data
  • • Common work areas
  • • Centralized state management

Interactive Tutorial

Hands-On Exercise: Shared Data Management
Practice using GLOBAL for effective data sharing in nested programs

Exercise 1: Configuration Management

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
*> 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.

Exercise 2: Error Tracking

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
*> 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.

Advanced GLOBAL Patterns

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
IDENTIFICATION 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.

Best Practices

Knowledge Check

Test Your Understanding

Question 1: Basic Usage

How do you declare a global data item in COBOL?

Answer: 01 data-name GLOBAL PIC clause. or 01 data-name PIC clause GLOBAL.

Question 2: Scope Rules

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.

Question 3: Best Practice

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.

Common Patterns

Configuration Sharing
cobol
1
2
3
4
5
6
7
8
01 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
State Management
cobol
1
2
3
4
5
6
7
01 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

Frequently Asked Questions