MainframeMaster

COBOL Tutorial

COBOL ID (Identifiers)

COBOL identifiers represent the fundamental naming mechanism for data items, files, procedures, and program elements within COBOL applications. These user-defined names provide essential identification capabilities that enable clear program organization, efficient data reference, and maintainable code structures while supporting comprehensive naming conventions, qualification rules, and scope resolution mechanisms that ensure unique identification across complex enterprise applications with multiple data hierarchies, nested structures, and sophisticated business logic requirements.

Identifier Rules and Syntax

COBOL Identifier Specifications
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
*> Valid COBOL identifiers 01 EMPLOYEE-RECORD. 05 EMP-ID PIC 9(6). 05 EMP-NAME PIC X(30). 05 SALARY-INFO. 10 BASE-SALARY PIC 9(7)V99. 10 BONUS-AMOUNT PIC 9(5)V99. *> Identifier naming rules: *> - Must start with a letter (A-Z) *> - Can contain letters, digits (0-9), and hyphens (-) *> - Cannot end with a hyphen *> - Length: 1-30 characters *> - Cannot be COBOL reserved words *> Valid examples: CUSTOMER-ID TOTAL-AMOUNT FIELD-A A1 X999 VERY-LONG-DESCRIPTIVE-NAME *> Invalid examples: *> 123ABC (starts with digit) *> FIELD- (ends with hyphen) *> MOVE (reserved word) *> TOO-LONG-NAME-EXCEEDING-THIRTY-CHARS (too long) *> Qualification examples 01 ORDER-RECORD. 05 CUSTOMER-INFO. 10 CUSTOMER-ID PIC X(10). 10 CUSTOMER-NAME PIC X(30). 05 PRODUCT-INFO. 10 PRODUCT-ID PIC X(8). 10 PRODUCT-NAME PIC X(25). *> Qualified references MOVE "12345" TO CUSTOMER-ID OF CUSTOMER-INFO MOVE "LAPTOP" TO PRODUCT-NAME OF PRODUCT-INFO.
Data Names
Qualification
Naming Rules

Comprehensive Identifier 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
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
IDENTIFICATION DIVISION. PROGRAM-ID. IDENTIFIER-EXAMPLES. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EMPLOYEE-FILE ASSIGN TO "EMPLOYEE.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS EMP-KEY FILE STATUS IS EMP-STATUS. DATA DIVISION. FILE SECTION. FD EMPLOYEE-FILE. 01 EMPLOYEE-RECORD. 05 EMP-KEY PIC 9(6). 05 PERSONAL-DATA. 10 FIRST-NAME PIC X(15). 10 MIDDLE-INITIAL PIC X. 10 LAST-NAME PIC X(20). 10 DATE-OF-BIRTH PIC 9(8). 05 EMPLOYMENT-DATA. 10 HIRE-DATE PIC 9(8). 10 DEPARTMENT. 15 DEPT-CODE PIC X(3). 15 DEPT-NAME PIC X(20). 10 JOB-INFO. 15 JOB-TITLE PIC X(25). 15 JOB-GRADE PIC 9(2). 05 SALARY-DATA. 10 BASE-SALARY PIC 9(7)V99. 10 COMMISSION PIC 9(5)V99. 10 BONUS PIC 9(5)V99. WORKING-STORAGE SECTION. 01 WS-EMPLOYEE-WORK. 05 WS-EMP-KEY PIC 9(6). 05 WS-FULL-NAME PIC X(36). 05 WS-TOTAL-COMP PIC 9(8)V99. 01 WS-DEPARTMENT-TABLE. 05 WS-DEPT-ENTRY OCCURS 50 TIMES INDEXED BY DEPT-IDX. 10 WS-DEPT-CODE PIC X(3). 10 WS-DEPT-NAME PIC X(20). 10 WS-DEPT-MANAGER PIC X(25). 01 WS-COUNTERS. 05 WS-RECORD-COUNT PIC 9(5) VALUE 0. 05 WS-ERROR-COUNT PIC 9(3) VALUE 0. 05 WS-TOTAL-SALARY PIC 9(10)V99 VALUE 0. 01 WS-FLAGS. 05 WS-EOF-FLAG PIC X VALUE 'N'. 88 EOF-REACHED VALUE 'Y'. 05 WS-VALID-FLAG PIC X VALUE 'Y'. 88 RECORD-VALID VALUE 'Y'. 88 RECORD-INVALID VALUE 'N'. PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM OPEN-FILES PERFORM PROCESS-EMPLOYEES PERFORM DISPLAY-STATISTICS PERFORM CLOSE-FILES STOP RUN. OPEN-FILES. OPEN I-O EMPLOYEE-FILE IF EMP-STATUS NOT = "00" DISPLAY "Error opening employee file: " EMP-STATUS STOP RUN END-IF. PROCESS-EMPLOYEES. PERFORM UNTIL EOF-REACHED READ EMPLOYEE-FILE NEXT AT END SET EOF-REACHED TO TRUE NOT AT END PERFORM PROCESS-EMPLOYEE-RECORD END-READ END-PERFORM. PROCESS-EMPLOYEE-RECORD. ADD 1 TO WS-RECORD-COUNT *> Demonstrate qualified identifier usage MOVE EMP-KEY TO WS-EMP-KEY *> Build full name using qualification STRING FIRST-NAME OF PERSONAL-DATA DELIMITED BY SPACE " " DELIMITED BY SIZE MIDDLE-INITIAL OF PERSONAL-DATA DELIMITED BY SIZE ". " DELIMITED BY SIZE LAST-NAME OF PERSONAL-DATA DELIMITED BY SPACE INTO WS-FULL-NAME *> Calculate total compensation COMPUTE WS-TOTAL-COMP = BASE-SALARY OF SALARY-DATA + COMMISSION OF SALARY-DATA + BONUS OF SALARY-DATA ADD WS-TOTAL-COMP TO WS-TOTAL-SALARY *> Validate employee data PERFORM VALIDATE-EMPLOYEE-DATA *> Display employee information DISPLAY "Employee: " WS-EMP-KEY " - " WS-FULL-NAME DISPLAY " Department: " DEPT-CODE OF DEPARTMENT " - " DEPT-NAME OF DEPARTMENT DISPLAY " Job: " JOB-TITLE OF JOB-INFO " Grade: " JOB-GRADE OF JOB-INFO DISPLAY " Total Compensation: $" WS-TOTAL-COMP. VALIDATE-EMPLOYEE-DATA. SET RECORD-VALID TO TRUE *> Validate using qualified names IF EMP-KEY = 0 DISPLAY "Error: Invalid employee key" SET RECORD-INVALID TO TRUE ADD 1 TO WS-ERROR-COUNT END-IF IF FIRST-NAME OF PERSONAL-DATA = SPACES DISPLAY "Error: Missing first name for " EMP-KEY SET RECORD-INVALID TO TRUE ADD 1 TO WS-ERROR-COUNT END-IF IF LAST-NAME OF PERSONAL-DATA = SPACES DISPLAY "Error: Missing last name for " EMP-KEY SET RECORD-INVALID TO TRUE ADD 1 TO WS-ERROR-COUNT END-IF IF BASE-SALARY OF SALARY-DATA = 0 DISPLAY "Warning: Zero base salary for " EMP-KEY END-IF. DISPLAY-STATISTICS. DISPLAY "Processing Statistics:" DISPLAY " Records processed: " WS-RECORD-COUNT DISPLAY " Errors found: " WS-ERROR-COUNT DISPLAY " Total payroll: $" WS-TOTAL-SALARY. CLOSE-FILES. CLOSE EMPLOYEE-FILE. *> Demonstrate different identifier types and usage DEMONSTRATE-IDENTIFIER-TYPES. *> Data names (most common identifiers) MOVE "JOHN" TO FIRST-NAME OF PERSONAL-DATA MOVE "DOE" TO LAST-NAME OF PERSONAL-DATA *> Qualified data names MOVE "IT" TO DEPT-CODE OF DEPARTMENT MOVE "INFORMATION TECHNOLOGY" TO DEPT-NAME OF DEPARTMENT *> Indexed identifiers SET DEPT-IDX TO 1 MOVE "HR" TO WS-DEPT-CODE(DEPT-IDX) MOVE "HUMAN RESOURCES" TO WS-DEPT-NAME(DEPT-IDX) *> Condition names (88-level items) SET EOF-REACHED TO TRUE IF EOF-REACHED DISPLAY "End of file condition is set" END-IF *> File names READ EMPLOYEE-FILE KEY IS EMP-KEY INVALID KEY DISPLAY "Employee not found" END-READ. *> Advanced qualification examples ADVANCED-QUALIFICATION. *> Multiple levels of qualification MOVE "MGR" TO JOB-TITLE OF JOB-INFO OF EMPLOYMENT-DATA MOVE 15 TO JOB-GRADE OF JOB-INFO OF EMPLOYMENT-DATA *> Alternative qualification syntax (IN vs OF) MOVE "SALES" TO DEPT-CODE IN DEPARTMENT MOVE "SALES DEPARTMENT" TO DEPT-NAME IN DEPARTMENT *> Subscription with qualification MOVE "FINANCE" TO WS-DEPT-CODE OF WS-DEPT-ENTRY(5) MOVE "FINANCIAL SERVICES" TO WS-DEPT-NAME OF WS-DEPT-ENTRY(5). *> Identifier scope and uniqueness SCOPE-DEMONSTRATION. *> Same name in different contexts MOVE 100 TO EMP-KEY *> File record field MOVE 100 TO WS-EMP-KEY *> Working storage field *> Qualification needed when ambiguous IF EMP-KEY OF EMPLOYEE-RECORD = WS-EMP-KEY DISPLAY "Keys match" END-IF.

Identifier Categories

Data Names
  • • Elementary items
  • • Group items
  • • Condition names (88-level)
  • • Special registers
Program Names
  • • Program-ID names
  • • Paragraph names
  • • Section names
  • • File names

Knowledge Check

Test Your Understanding

Question 1: Naming Rules

What are the basic rules for COBOL identifiers?

Answer: Must start with a letter, can contain letters/digits/hyphens, cannot end with hyphen, 1-30 characters long, cannot be reserved words, must be unique in scope.

Question 2: Qualification

When do you need to qualify identifiers in COBOL?

Answer: When multiple data items have the same name in different hierarchical levels or contexts, requiring OF or IN keywords to specify which item is being referenced.