MainframeMaster

COBOL Tutorial

COBOL NULL and NULLS

NULL and NULLS represent comprehensive null value management and data initialization capabilities within COBOL programming environments, providing sophisticated pointer handling features, advanced database null value operations, and intelligent memory management that enable safe pointer operations, reliable null value processing, and systematic data initialization. These figurative constants embody modern data handling principles by supporting comprehensive null value representation, enabling sophisticated pointer management workflows, and facilitating precise null value control requirements while maintaining data integrity, ensuring safe memory operations, and enabling robust null handling architectures across enterprise applications requiring pointer operations, database integration, and reliable null value management throughout complex data processing scenarios.

NULL and NULLS Usage

NULL Operations and Contexts
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
*> Pointer operations with NULL 01 WS-POINTER-VAR POINTER. 01 WS-DATA-POINTER POINTER. *> Initialize pointers to NULL SET WS-POINTER-VAR TO NULL SET WS-DATA-POINTER TO NULL *> Test for NULL pointers IF WS-POINTER-VAR = NULL DISPLAY "Pointer is null - not initialized" END-IF *> Database operations with NULL (embedded SQL) EXEC SQL SELECT customer_name, phone_number INTO :customer-name, :phone-number FROM customers WHERE customer_id = :customer-id END-EXEC IF phone-number = NULL DISPLAY "Phone number not available" END-IF *> Initialize data structures with NULLS 01 WS-OPTIONAL-FIELDS. 05 OPTIONAL-DATA PIC X(50) VALUE NULLS. 05 BACKUP-PHONE PIC X(15) VALUE NULLS. *> Conditional null checking EVALUATE TRUE WHEN customer-email = NULLS DISPLAY "No email address on file" WHEN customer-email NOT = NULLS DISPLAY "Email: " customer-email END-EVALUATE *> Memory allocation example 01 WS-MEMORY-PTR POINTER VALUE NULL. 01 WS-ALLOCATED-SIZE PIC 9(8) COMP. CALL "MALLOC" USING BY VALUE 1024 RETURNING WS-MEMORY-PTR IF WS-MEMORY-PTR = NULL DISPLAY "Memory allocation failed" ELSE DISPLAY "Memory allocated successfully" END-IF
Null Values
Pointers
Data Initialization

Comprehensive NULL 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
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
IDENTIFICATION DIVISION. PROGRAM-ID. NULL-HANDLING-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. *> Pointer variables for demonstration 01 WS-POINTER-DEMO. 05 WS-DATA-PTR POINTER VALUE NULL. 05 WS-BACKUP-PTR POINTER VALUE NULL. 05 WS-TEMP-PTR POINTER. *> Database-style fields with null indicators 01 WS-CUSTOMER-DATA. 05 WS-CUSTOMER-ID PIC X(8). 05 WS-CUSTOMER-NAME PIC X(30). 05 WS-EMAIL-ADDRESS PIC X(50) VALUE NULLS. 05 WS-PHONE-NUMBER PIC X(15) VALUE NULLS. 05 WS-FAX-NUMBER PIC X(15) VALUE NULLS. *> Null indicator fields (database integration) 01 WS-NULL-INDICATORS. 05 WS-EMAIL-NULL-IND PIC S9(4) COMP VALUE -1. 05 WS-PHONE-NULL-IND PIC S9(4) COMP VALUE -1. 05 WS-FAX-NULL-IND PIC S9(4) COMP VALUE -1. *> Processing statistics 01 WS-PROCESSING-STATS. 05 WS-NULL-COUNT PIC 9(4) VALUE 0. 05 WS-VALID-COUNT PIC 9(4) VALUE 0. 05 WS-POINTER-COUNT PIC 9(4) VALUE 0. PROCEDURE DIVISION. MAIN-NULL-DEMO. DISPLAY "=== NULL AND NULLS DEMONSTRATION ===" DISPLAY SPACES PERFORM DEMONSTRATE-POINTER-NULL PERFORM DEMONSTRATE-DATA-NULLS PERFORM DEMONSTRATE-NULL-VALIDATION PERFORM DEMONSTRATE-DATABASE-NULLS PERFORM DISPLAY-FINAL-STATISTICS STOP RUN. DEMONSTRATE-POINTER-NULL. DISPLAY "=== POINTER NULL OPERATIONS ===" DISPLAY SPACES *> Initialize pointers to NULL SET WS-DATA-PTR TO NULL SET WS-BACKUP-PTR TO NULL DISPLAY "Testing pointer NULL states..." IF WS-DATA-PTR = NULL DISPLAY " ✓ Data pointer is NULL (uninitialized)" ADD 1 TO WS-NULL-COUNT END-IF IF WS-BACKUP-PTR = NULL DISPLAY " ✓ Backup pointer is NULL (uninitialized)" ADD 1 TO WS-NULL-COUNT END-IF *> Simulate pointer allocation DISPLAY " " DISPLAY "Simulating memory allocation..." *> In real implementation, this would call system allocation SET WS-DATA-PTR TO ADDRESS OF WS-CUSTOMER-DATA IF WS-DATA-PTR NOT = NULL DISPLAY " ✓ Data pointer allocated successfully" ADD 1 TO WS-POINTER-COUNT ADD 1 TO WS-VALID-COUNT ELSE DISPLAY " ❌ Data pointer allocation failed" END-IF *> Demonstrate pointer cleanup DISPLAY " " DISPLAY "Cleaning up pointers..." SET WS-DATA-PTR TO NULL IF WS-DATA-PTR = NULL DISPLAY " ✓ Data pointer reset to NULL" END-IF DISPLAY SPACES. DEMONSTRATE-DATA-NULLS. DISPLAY "=== DATA FIELD NULLS ===" DISPLAY SPACES DISPLAY "Initializing optional fields with NULLS..." *> Initialize optional fields MOVE "CUST001" TO WS-CUSTOMER-ID MOVE "JOHN DOE" TO WS-CUSTOMER-NAME MOVE NULLS TO WS-EMAIL-ADDRESS MOVE NULLS TO WS-PHONE-NUMBER MOVE NULLS TO WS-FAX-NUMBER DISPLAY "Customer data analysis:" DISPLAY " Customer ID: " WS-CUSTOMER-ID DISPLAY " Customer Name: " WS-CUSTOMER-NAME *> Check for null values in optional fields IF WS-EMAIL-ADDRESS = NULLS DISPLAY " Email: [NULL - Not provided]" ADD 1 TO WS-NULL-COUNT ELSE DISPLAY " Email: " WS-EMAIL-ADDRESS ADD 1 TO WS-VALID-COUNT END-IF IF WS-PHONE-NUMBER = NULLS DISPLAY " Phone: [NULL - Not provided]" ADD 1 TO WS-NULL-COUNT ELSE DISPLAY " Phone: " WS-PHONE-NUMBER ADD 1 TO WS-VALID-COUNT END-IF IF WS-FAX-NUMBER = NULLS DISPLAY " Fax: [NULL - Not provided]" ADD 1 TO WS-NULL-COUNT ELSE DISPLAY " Fax: " WS-FAX-NUMBER ADD 1 TO WS-VALID-COUNT END-IF DISPLAY SPACES. DEMONSTRATE-NULL-VALIDATION. DISPLAY "=== NULL VALUE VALIDATION ===" DISPLAY SPACES DISPLAY "Performing null validation checks..." *> Sample data with some nulls MOVE "test@email.com" TO WS-EMAIL-ADDRESS MOVE NULLS TO WS-PHONE-NUMBER MOVE "555-0123" TO WS-FAX-NUMBER *> Validation logic PERFORM VALIDATE-CONTACT-INFO DISPLAY " " DISPLAY "Validation complete." DISPLAY SPACES. VALIDATE-CONTACT-INFO. DISPLAY "Contact information validation:" *> Email validation IF WS-EMAIL-ADDRESS NOT = NULLS DISPLAY " ✅ Email address provided: " WS-EMAIL-ADDRESS ADD 1 TO WS-VALID-COUNT ELSE DISPLAY " ⚠️ Email address is NULL" ADD 1 TO WS-NULL-COUNT END-IF *> Phone validation IF WS-PHONE-NUMBER NOT = NULLS DISPLAY " ✅ Phone number provided: " WS-PHONE-NUMBER ADD 1 TO WS-VALID-COUNT ELSE DISPLAY " ⚠️ Phone number is NULL" ADD 1 TO WS-NULL-COUNT END-IF *> Fax validation IF WS-FAX-NUMBER NOT = NULLS DISPLAY " ✅ Fax number provided: " WS-FAX-NUMBER ADD 1 TO WS-VALID-COUNT ELSE DISPLAY " ⚠️ Fax number is NULL" ADD 1 TO WS-NULL-COUNT END-IF *> Business rule: At least one contact method required IF WS-EMAIL-ADDRESS = NULLS AND WS-PHONE-NUMBER = NULLS AND WS-FAX-NUMBER = NULLS DISPLAY " " DISPLAY " ❌ VALIDATION ERROR: No contact information provided" DISPLAY " At least one contact method is required" ELSE DISPLAY " " DISPLAY " ✅ Contact validation passed" END-IF. DEMONSTRATE-DATABASE-NULLS. DISPLAY "=== DATABASE NULL HANDLING ===" DISPLAY SPACES DISPLAY "Simulating database operations with NULL values..." *> Initialize null indicators for database simulation MOVE -1 TO WS-EMAIL-NULL-IND *> -1 indicates NULL MOVE 0 TO WS-PHONE-NULL-IND *> 0 indicates valid data MOVE -1 TO WS-FAX-NULL-IND *> -1 indicates NULL *> Set corresponding data values MOVE NULLS TO WS-EMAIL-ADDRESS MOVE "555-1234" TO WS-PHONE-NUMBER MOVE NULLS TO WS-FAX-NUMBER DISPLAY "Database field analysis:" *> Process fields based on null indicators IF WS-EMAIL-NULL-IND = -1 DISPLAY " Email: NULL (database null indicator)" ADD 1 TO WS-NULL-COUNT ELSE DISPLAY " Email: " WS-EMAIL-ADDRESS ADD 1 TO WS-VALID-COUNT END-IF IF WS-PHONE-NULL-IND = -1 DISPLAY " Phone: NULL (database null indicator)" ADD 1 TO WS-NULL-COUNT ELSE DISPLAY " Phone: " WS-PHONE-NUMBER ADD 1 TO WS-VALID-COUNT END-IF IF WS-FAX-NULL-IND = -1 DISPLAY " Fax: NULL (database null indicator)" ADD 1 TO WS-NULL-COUNT ELSE DISPLAY " Fax: " WS-FAX-NUMBER ADD 1 TO WS-VALID-COUNT END-IF DISPLAY " " DISPLAY "Database operations summary:" DISPLAY " NULL fields: " WS-NULL-COUNT DISPLAY " Valid fields: " WS-VALID-COUNT DISPLAY SPACES. DISPLAY-FINAL-STATISTICS. DISPLAY "=== FINAL STATISTICS ===" DISPLAY SPACES DISPLAY "NULL handling demonstration complete." DISPLAY "Processing summary:" DISPLAY " Total NULL values encountered: " WS-NULL-COUNT DISPLAY " Total valid values processed: " WS-VALID-COUNT DISPLAY " Pointer operations performed: " WS-POINTER-COUNT DISPLAY " " DISPLAY "Key NULL concepts demonstrated:" DISPLAY " ✓ Pointer NULL initialization and testing" DISPLAY " ✓ Data field NULL value handling" DISPLAY " ✓ NULL validation in business logic" DISPLAY " ✓ Database NULL indicator processing" DISPLAY " ✓ Safe NULL value operations" DISPLAY SPACES.

NULL Handling Features

Pointer Operations
  • • Safe pointer initialization
  • • Memory allocation validation
  • • Pointer cleanup and reset
  • • NULL pointer testing
Database Integration
  • • NULL indicator handling
  • • Missing data representation
  • • SQL NULL value operations
  • • Optional field management

Interactive Tutorial

Hands-On Exercise: Contact Management System
Practice using NULL values for optional data handling and validation

Exercise 1: Customer Contact System

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
01 CONTACT-RECORD. 05 PRIMARY-EMAIL PIC X(50) VALUE NULLS. 05 SECONDARY-EMAIL PIC X(50) VALUE NULLS. 05 HOME-PHONE PIC X(15) VALUE NULLS. 05 WORK-PHONE PIC X(15) VALUE NULLS. 05 MOBILE-PHONE PIC X(15) VALUE NULLS. 01 CONTACT-VALIDATION. 05 HAS-EMAIL PIC X VALUE 'N'. 05 HAS-PHONE PIC X VALUE 'N'. 05 CONTACT-SCORE PIC 9(2) VALUE 0. PROCEDURE DIVISION. VALIDATE-CONTACT-COMPLETENESS. MOVE 'N' TO HAS-EMAIL MOVE 'N' TO HAS-PHONE MOVE 0 TO CONTACT-SCORE *> Check email availability IF PRIMARY-EMAIL NOT = NULLS MOVE 'Y' TO HAS-EMAIL ADD 10 TO CONTACT-SCORE DISPLAY "✓ Primary email: " PRIMARY-EMAIL END-IF IF SECONDARY-EMAIL NOT = NULLS ADD 5 TO CONTACT-SCORE DISPLAY "✓ Secondary email: " SECONDARY-EMAIL END-IF *> Check phone availability IF HOME-PHONE NOT = NULLS MOVE 'Y' TO HAS-PHONE ADD 8 TO CONTACT-SCORE DISPLAY "✓ Home phone: " HOME-PHONE END-IF IF WORK-PHONE NOT = NULLS MOVE 'Y' TO HAS-PHONE ADD 8 TO CONTACT-SCORE DISPLAY "✓ Work phone: " WORK-PHONE END-IF IF MOBILE-PHONE NOT = NULLS MOVE 'Y' TO HAS-PHONE ADD 10 TO CONTACT-SCORE DISPLAY "✓ Mobile phone: " MOBILE-PHONE END-IF *> Evaluate contact completeness EVALUATE TRUE WHEN CONTACT-SCORE >= 20 DISPLAY "🌟 Excellent contact information" WHEN CONTACT-SCORE >= 15 DISPLAY "👍 Good contact information" WHEN CONTACT-SCORE >= 10 DISPLAY "⚠️ Adequate contact information" WHEN OTHER DISPLAY "❌ Insufficient contact information" END-EVALUATE *> Business rule validation IF HAS-EMAIL = 'N' AND HAS-PHONE = 'N' DISPLAY "❌ ERROR: No valid contact method available" END-IF.

Exercise 2: Memory Management with NULL

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
01 MEMORY-MANAGEMENT. 05 BUFFER-PTR POINTER VALUE NULL. 05 BACKUP-PTR POINTER VALUE NULL. 05 BUFFER-SIZE PIC 9(8) COMP VALUE 0. 05 ALLOCATION-STATUS PIC X VALUE 'N'. PROCEDURE DIVISION. SAFE-MEMORY-OPERATIONS. DISPLAY "Initializing memory management..." *> Ensure pointers start as NULL SET BUFFER-PTR TO NULL SET BACKUP-PTR TO NULL DISPLAY "Initial pointer states:" PERFORM CHECK-POINTER-STATUS *> Simulate memory allocation MOVE 1024 TO BUFFER-SIZE DISPLAY " " DISPLAY "Attempting to allocate " BUFFER-SIZE " bytes..." *> In real implementation: CALL "malloc" or similar IF BUFFER-SIZE > 0 SET BUFFER-PTR TO ADDRESS OF MEMORY-MANAGEMENT MOVE 'Y' TO ALLOCATION-STATUS DISPLAY "✓ Memory allocated successfully" ELSE DISPLAY "❌ Invalid buffer size" END-IF DISPLAY " " DISPLAY "Post-allocation pointer states:" PERFORM CHECK-POINTER-STATUS *> Create backup pointer IF BUFFER-PTR NOT = NULL SET BACKUP-PTR TO BUFFER-PTR DISPLAY "✓ Backup pointer created" END-IF *> Safe cleanup DISPLAY " " DISPLAY "Performing safe cleanup..." IF BUFFER-PTR NOT = NULL *> In real implementation: CALL "free" or similar SET BUFFER-PTR TO NULL DISPLAY "✓ Primary pointer freed" END-IF IF BACKUP-PTR NOT = NULL SET BACKUP-PTR TO NULL DISPLAY "✓ Backup pointer cleared" END-IF DISPLAY " " DISPLAY "Final pointer states:" PERFORM CHECK-POINTER-STATUS. CHECK-POINTER-STATUS. IF BUFFER-PTR = NULL DISPLAY " Buffer pointer: NULL" ELSE DISPLAY " Buffer pointer: ALLOCATED" END-IF IF BACKUP-PTR = NULL DISPLAY " Backup pointer: NULL" ELSE DISPLAY " Backup pointer: ALLOCATED" END-IF.

Best Practices

Knowledge Check

Test Your Understanding

Question 1: NULL Purpose

What is the primary purpose of NULL in COBOL?

Answer: NULL represents a null value, primarily used with pointer variables to indicate they don't reference any memory location, and in database operations to represent missing or undefined data values.

Question 2: Pointer Safety

Why should pointers be initialized to NULL?

Answer: Initializing pointers to NULL provides a safe default state, prevents undefined behavior from uninitialized pointers, and allows reliable testing to determine if a pointer references valid memory before use.

Question 3: Database Applications

How are NULL values handled in database operations?

Answer: Database NULL values are handled using null indicator variables that signal whether a field contains valid data (-1 for NULL, 0 for valid). This allows proper processing of optional or missing database fields in COBOL programs.