MainframeMaster

COBOL Tutorial

COBOL LABEL

The LABEL clause represents fundamental file identification and volume management specifications within COBOL file processing environments, providing sophisticated label handling capabilities that enable proper file recognition, volume tracking, and storage media management across mainframe systems. These label specifications embody traditional storage management principles by supporting standard IBM tape labels, custom label processing routines, and unlabeled file handling while maintaining compatibility with legacy systems, ensuring proper file identification, and facilitating comprehensive volume management across enterprise applications requiring robust file processing, reliable storage handling, and compliant data management with optimized performance characteristics and standardized identification protocols.

LABEL Clause Syntax

File Description Label 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
*> FD section LABEL clause syntax FD file-name LABEL RECORDS ARE [STANDARD | OMITTED | user-defined-name] [BLOCK CONTAINS integer RECORDS] [RECORD CONTAINS integer CHARACTERS] [DATA RECORDS ARE record-name]. *> Standard tape labels (most common) FD TAPE-FILE LABEL RECORDS ARE STANDARD BLOCK CONTAINS 100 RECORDS RECORD CONTAINS 80 CHARACTERS DATA RECORDS ARE TAPE-RECORD. *> Unlabeled files (no label processing) FD UNLABELED-FILE LABEL RECORDS ARE OMITTED RECORD CONTAINS 120 CHARACTERS DATA RECORDS ARE UNLABELED-RECORD. *> User-defined label processing FD CUSTOM-LABEL-FILE LABEL RECORDS ARE USER-LABEL-ROUTINE RECORD CONTAINS 200 CHARACTERS DATA RECORDS ARE CUSTOM-RECORD. *> Disk files (usually OMITTED in modern systems) FD DISK-FILE LABEL RECORDS ARE OMITTED RECORD CONTAINS 100 CHARACTERS DATA RECORDS ARE DISK-RECORD. *> Legacy system examples FD MASTER-TAPE LABEL RECORDS ARE STANDARD BLOCK CONTAINS 50 RECORDS RECORD CONTAINS 150 CHARACTERS DATA RECORDS ARE MASTER-RECORD. FD BACKUP-TAPE LABEL RECORDS ARE STANDARD BLOCK CONTAINS 0 RECORDS *> System-determined blocking RECORD CONTAINS 500 CHARACTERS DATA RECORDS ARE BACKUP-RECORD. *> FILE-CONTROL with LABEL considerations SELECT TAPE-INPUT ASSIGN TO "INPUT.TAPE" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-TAPE-STATUS. *> Corresponding FD with LABEL FD TAPE-INPUT LABEL RECORDS ARE STANDARD BLOCK CONTAINS 10 RECORDS DATA RECORDS ARE INPUT-RECORD.
File Labels
Volume Management
Storage Systems

Comprehensive LABEL 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
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
IDENTIFICATION DIVISION. PROGRAM-ID. LABEL-DEMONSTRATION. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. *> Standard labeled tape input SELECT TRANSACTION-TAPE ASSIGN TO "TRANS.TAPE" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-TRANS-STATUS. *> Standard labeled tape output SELECT BACKUP-TAPE ASSIGN TO "BACKUP.TAPE" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-BACKUP-STATUS. *> Unlabeled work file SELECT WORK-FILE ASSIGN TO "WORK.FILE" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-WORK-STATUS. *> Master file with standard labels SELECT CUSTOMER-MASTER ASSIGN TO "CUSTMAST.TAPE" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-MASTER-STATUS. *> Report output (typically unlabeled) SELECT REPORT-FILE ASSIGN TO "REPORT.OUTPUT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-REPORT-STATUS. DATA DIVISION. FILE SECTION. *> Transaction tape with standard labels FD TRANSACTION-TAPE LABEL RECORDS ARE STANDARD BLOCK CONTAINS 100 RECORDS RECORD CONTAINS 80 CHARACTERS DATA RECORDS ARE TRANSACTION-RECORD. 01 TRANSACTION-RECORD. 05 TRANS-ID PIC X(10). 05 TRANS-DATE PIC 9(8). 05 TRANS-AMOUNT PIC S9(10)V99. 05 TRANS-TYPE PIC X(5). 05 TRANS-ACCOUNT PIC X(15). 05 TRANS-DESCRIPTION PIC X(30). *> Backup tape with standard labels and large blocks FD BACKUP-TAPE LABEL RECORDS ARE STANDARD BLOCK CONTAINS 0 RECORDS *> System-determined optimal blocking RECORD CONTAINS 500 CHARACTERS DATA RECORDS ARE BACKUP-RECORD. 01 BACKUP-RECORD. 05 BACKUP-HEADER. 10 BACKUP-DATE PIC 9(8). 10 BACKUP-TIME PIC 9(6). 10 BACKUP-SEQ PIC 9(6). 05 BACKUP-DATA PIC X(480). *> Work file without labels (temporary processing) FD WORK-FILE LABEL RECORDS ARE OMITTED RECORD CONTAINS 120 CHARACTERS DATA RECORDS ARE WORK-RECORD. 01 WORK-RECORD. 05 WORK-KEY PIC X(15). 05 WORK-DATA PIC X(100). 05 WORK-FLAGS PIC X(5). *> Customer master with standard tape labels FD CUSTOMER-MASTER LABEL RECORDS ARE STANDARD BLOCK CONTAINS 50 RECORDS RECORD CONTAINS 200 CHARACTERS DATA RECORDS ARE CUSTOMER-RECORD. 01 CUSTOMER-RECORD. 05 CUST-ID PIC X(10). 05 CUST-NAME PIC X(40). 05 CUST-ADDRESS PIC X(60). 05 CUST-PHONE PIC X(15). 05 CUST-CREDIT-INFO. 10 CUST-CREDIT-LIMIT PIC 9(8)V99. 10 CUST-BALANCE PIC S9(8)V99. 10 CUST-LAST-PAYMENT PIC 9(8). 05 CUST-STATUS PIC X(10). 05 FILLER PIC X(47). *> Report file (typically no labels needed) FD REPORT-FILE LABEL RECORDS ARE OMITTED RECORD CONTAINS 132 CHARACTERS DATA RECORDS ARE REPORT-LINE. 01 REPORT-LINE PIC X(132). WORKING-STORAGE SECTION. *> File status fields 01 WS-FILE-STATUS-FIELDS. 05 WS-TRANS-STATUS PIC X(2). 05 WS-BACKUP-STATUS PIC X(2). 05 WS-WORK-STATUS PIC X(2). 05 WS-MASTER-STATUS PIC X(2). 05 WS-REPORT-STATUS PIC X(2). *> Volume and label information 01 WS-VOLUME-INFO. 05 WS-CURRENT-VOLUME PIC X(6). 05 WS-VOLUME-COUNT PIC 9(3) VALUE 1. 05 WS-VOLUME-SEQUENCE PIC 9(3) VALUE 1. 05 WS-DATASET-NAME PIC X(44). 05 WS-CREATION-DATE PIC 9(8). *> Processing counters 01 WS-COUNTERS. 05 WS-TRANS-COUNT PIC 9(8) VALUE 0. 05 WS-BACKUP-COUNT PIC 9(8) VALUE 0. 05 WS-MASTER-COUNT PIC 9(8) VALUE 0. 05 WS-ERROR-COUNT PIC 9(6) VALUE 0. 05 WS-VOLUME-CHANGES PIC 9(3) VALUE 0. *> Label processing flags 01 WS-LABEL-FLAGS. 05 WS-LABEL-CHECK-FLAG PIC X VALUE 'Y'. 05 WS-VOLUME-CHECK-FLAG PIC X VALUE 'Y'. 05 WS-END-OF-VOLUME PIC X VALUE 'N'. 05 WS-MULTI-VOLUME PIC X VALUE 'N'. *> Date and time fields for labeling 01 WS-CURRENT-DATE-TIME. 05 WS-CURRENT-DATE PIC 9(8). 05 WS-CURRENT-TIME PIC 9(6). 05 WS-DATE-FORMATTED PIC X(10). PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM INITIALIZE-PROCESSING PERFORM DEMONSTRATE-STANDARD-LABELS PERFORM DEMONSTRATE-OMITTED-LABELS PERFORM DEMONSTRATE-MULTI-VOLUME-PROCESSING PERFORM DEMONSTRATE-BACKUP-OPERATIONS PERFORM DEMONSTRATE-LABEL-ERROR-HANDLING PERFORM CLEANUP-PROCESSING STOP RUN. INITIALIZE-PROCESSING. DISPLAY "=== LABEL PROCESSING DEMONSTRATION ===" *> Get current date/time for labeling MOVE FUNCTION CURRENT-DATE TO WS-CURRENT-DATE-TIME MOVE WS-CURRENT-DATE TO WS-CREATION-DATE DISPLAY "Processing started: " WS-CURRENT-DATE " " WS-CURRENT-TIME DISPLAY "Volume information will be tracked" DISPLAY SPACES. DEMONSTRATE-STANDARD-LABELS. DISPLAY "=== STANDARD LABEL PROCESSING ===" *> Open files with standard labels OPEN INPUT TRANSACTION-TAPE IF WS-TRANS-STATUS = "00" DISPLAY "Transaction tape opened with standard labels" MOVE "VOL001" TO WS-CURRENT-VOLUME DISPLAY "Current volume: " WS-CURRENT-VOLUME ELSE DISPLAY "Error opening transaction tape: " WS-TRANS-STATUS PERFORM LABEL-ERROR-ANALYSIS END-IF OPEN INPUT CUSTOMER-MASTER IF WS-MASTER-STATUS = "00" DISPLAY "Customer master opened with standard labels" ELSE DISPLAY "Error opening customer master: " WS-MASTER-STATUS PERFORM LABEL-ERROR-ANALYSIS END-IF *> Process some records to demonstrate label handling PERFORM READ-TRANSACTION-RECORDS PERFORM READ-CUSTOMER-RECORDS CLOSE TRANSACTION-TAPE CLOSE CUSTOMER-MASTER DISPLAY "Standard label files processed successfully" DISPLAY SPACES. READ-TRANSACTION-RECORDS. DISPLAY "Reading transaction records with label validation..." PERFORM UNTIL WS-TRANS-STATUS = "10" OR WS-TRANS-COUNT >= 10 READ TRANSACTION-TAPE AT END DISPLAY "End of transaction tape reached" NOT AT END ADD 1 TO WS-TRANS-COUNT DISPLAY "Transaction " WS-TRANS-COUNT ": " TRANS-ID " $" TRANS-AMOUNT *> Check for volume changes (status code "04") IF WS-TRANS-STATUS = "04" PERFORM HANDLE-VOLUME-CHANGE END-IF END-READ END-PERFORM DISPLAY "Transactions processed: " WS-TRANS-COUNT. READ-CUSTOMER-RECORDS. DISPLAY "Reading customer master records..." PERFORM UNTIL WS-MASTER-STATUS = "10" OR WS-MASTER-COUNT >= 5 READ CUSTOMER-MASTER AT END DISPLAY "End of customer master reached" NOT AT END ADD 1 TO WS-MASTER-COUNT DISPLAY "Customer " WS-MASTER-COUNT ": " CUST-ID " " CUST-NAME DISPLAY " Balance: $" CUST-BALANCE " Limit: $" CUST-CREDIT-LIMIT END-READ END-PERFORM DISPLAY "Customer records processed: " WS-MASTER-COUNT. DEMONSTRATE-OMITTED-LABELS. DISPLAY "=== OMITTED LABEL PROCESSING ===" *> Open unlabeled work file OPEN OUTPUT WORK-FILE IF WS-WORK-STATUS = "00" DISPLAY "Work file opened (no labels)" ELSE DISPLAY "Error opening work file: " WS-WORK-STATUS END-IF *> Write some work records PERFORM WRITE-WORK-RECORDS CLOSE WORK-FILE *> Reopen for input to verify OPEN INPUT WORK-FILE IF WS-WORK-STATUS = "00" DISPLAY "Work file reopened for verification" PERFORM READ-WORK-RECORDS END-IF CLOSE WORK-FILE DISPLAY "Unlabeled file processing completed" DISPLAY SPACES. WRITE-WORK-RECORDS. DISPLAY "Writing work records (no label overhead)..." PERFORM VARYING WS-TRANS-COUNT FROM 1 BY 1 UNTIL WS-TRANS-COUNT > 5 MOVE WS-TRANS-COUNT TO WORK-KEY(1:5) MOVE "TEMP DATA " TO WORK-DATA(1:10) MOVE WS-TRANS-COUNT TO WORK-DATA(11:5) MOVE "TEMP" TO WORK-FLAGS WRITE WORK-RECORD INVALID KEY DISPLAY "Error writing work record: " WS-TRANS-COUNT ADD 1 TO WS-ERROR-COUNT NOT INVALID KEY DISPLAY "Work record written: " WORK-KEY END-WRITE END-PERFORM. READ-WORK-RECORDS. DISPLAY "Verifying work records..." MOVE 0 TO WS-TRANS-COUNT PERFORM UNTIL WS-WORK-STATUS = "10" READ WORK-FILE AT END DISPLAY "End of work file reached" NOT AT END ADD 1 TO WS-TRANS-COUNT DISPLAY "Work record " WS-TRANS-COUNT ": " WORK-KEY " " WORK-FLAGS END-READ END-PERFORM. DEMONSTRATE-MULTI-VOLUME-PROCESSING. DISPLAY "=== MULTI-VOLUME PROCESSING ===" *> Simulate multi-volume tape processing MOVE "Y" TO WS-MULTI-VOLUME MOVE 1 TO WS-VOLUME-SEQUENCE PERFORM UNTIL WS-VOLUME-SEQUENCE > 3 DISPLAY "Processing volume " WS-VOLUME-SEQUENCE " of multi-volume set" *> Simulate volume processing PERFORM PROCESS-CURRENT-VOLUME ADD 1 TO WS-VOLUME-SEQUENCE ADD 1 TO WS-VOLUME-CHANGES IF WS-VOLUME-SEQUENCE <= 3 DISPLAY "Volume change detected - mounting next volume" PERFORM HANDLE-VOLUME-CHANGE END-IF END-PERFORM DISPLAY "Multi-volume processing completed" DISPLAY "Total volume changes: " WS-VOLUME-CHANGES DISPLAY SPACES. PROCESS-CURRENT-VOLUME. DISPLAY " Processing records on volume " WS-VOLUME-SEQUENCE DISPLAY " Volume label verification passed" DISPLAY " Data integrity check completed" *> Simulate some processing MOVE WS-VOLUME-SEQUENCE TO WS-CURRENT-VOLUME(4:3) DISPLAY " Current volume ID: VOL" WS-CURRENT-VOLUME(4:3). HANDLE-VOLUME-CHANGE. DISPLAY "*** VOLUME CHANGE DETECTED ***" DISPLAY "Previous volume: " WS-CURRENT-VOLUME ADD 1 TO WS-VOLUME-COUNT MOVE WS-VOLUME-COUNT TO WS-CURRENT-VOLUME(4:3) DISPLAY "New volume: VOL" WS-CURRENT-VOLUME(4:3) DISPLAY "Verifying volume label..." DISPLAY "Volume label verification successful" MOVE "N" TO WS-END-OF-VOLUME. DEMONSTRATE-BACKUP-OPERATIONS. DISPLAY "=== BACKUP OPERATIONS WITH LABELS ===" *> Create backup with standard labels OPEN OUTPUT BACKUP-TAPE IF WS-BACKUP-STATUS = "00" DISPLAY "Backup tape opened with standard labels" DISPLAY "Dataset name: BACKUP.DAILY." WS-CREATION-DATE ELSE DISPLAY "Error opening backup tape: " WS-BACKUP-STATUS GO TO BACKUP-ERROR-EXIT END-IF *> Write backup header PERFORM WRITE-BACKUP-HEADER *> Simulate backing up data PERFORM WRITE-BACKUP-DATA CLOSE BACKUP-TAPE DISPLAY "Backup completed with " WS-BACKUP-COUNT " records" DISPLAY SPACES. BACKUP-ERROR-EXIT. DISPLAY "Backup operation aborted due to errors" ADD 1 TO WS-ERROR-COUNT. WRITE-BACKUP-HEADER. MOVE WS-CREATION-DATE TO BACKUP-DATE MOVE WS-CURRENT-TIME TO BACKUP-TIME MOVE 1 TO BACKUP-SEQ MOVE "HEADER: DAILY BACKUP OPERATION" TO BACKUP-DATA(1:30) WRITE BACKUP-RECORD INVALID KEY DISPLAY "Error writing backup header" ADD 1 TO WS-ERROR-COUNT NOT INVALID KEY ADD 1 TO WS-BACKUP-COUNT DISPLAY "Backup header written successfully" END-WRITE. WRITE-BACKUP-DATA. DISPLAY "Writing backup data records..." PERFORM VARYING WS-TRANS-COUNT FROM 1 BY 1 UNTIL WS-TRANS-COUNT > 10 MOVE WS-CREATION-DATE TO BACKUP-DATE MOVE WS-CURRENT-TIME TO BACKUP-TIME ADD 1 TO BACKUP-SEQ STRING "DATA RECORD " WS-TRANS-COUNT " FOR BACKUP OPERATION" DELIMITED BY SIZE INTO BACKUP-DATA WRITE BACKUP-RECORD INVALID KEY DISPLAY "Error writing backup record: " WS-TRANS-COUNT ADD 1 TO WS-ERROR-COUNT NOT INVALID KEY ADD 1 TO WS-BACKUP-COUNT END-WRITE END-PERFORM DISPLAY "Backup data records written: " WS-BACKUP-COUNT. DEMONSTRATE-LABEL-ERROR-HANDLING. DISPLAY "=== LABEL ERROR HANDLING ===" *> Demonstrate various label-related error scenarios PERFORM HANDLE-WRONG-VOLUME-ERROR PERFORM HANDLE-LABEL-READ-ERROR PERFORM HANDLE-DATASET-NOT-FOUND. HANDLE-WRONG-VOLUME-ERROR. DISPLAY "Simulating wrong volume mounted error..." DISPLAY "Expected volume: VOL001" DISPLAY "Mounted volume: VOL999" DISPLAY "Action: Request correct volume mount" DISPLAY "Status: Volume verification failed". HANDLE-LABEL-READ-ERROR. DISPLAY "Simulating label read error..." DISPLAY "Label format: Invalid or corrupted" DISPLAY "Action: Check tape condition and retry" DISPLAY "Alternative: Use label recovery procedures". HANDLE-DATASET-NOT-FOUND. DISPLAY "Simulating dataset not found on volume..." DISPLAY "Requested dataset: PROD.MASTER.DATA" DISPLAY "Volume contents: Different dataset" DISPLAY "Action: Verify dataset name and volume". LABEL-ERROR-ANALYSIS. DISPLAY "Analyzing label-related error..." EVALUATE WS-TRANS-STATUS WHEN "90" DISPLAY "File not found - check dataset name" WHEN "92" DISPLAY "Wrong volume mounted" WHEN "93" DISPLAY "Dataset not on this volume" WHEN "94" DISPLAY "Label format error" WHEN "95" DISPLAY "Volume not initialized" WHEN OTHER DISPLAY "Other file status error: " WS-TRANS-STATUS END-EVALUATE ADD 1 TO WS-ERROR-COUNT. CLEANUP-PROCESSING. DISPLAY "=== PROCESSING SUMMARY ===" DISPLAY "Transaction records: " WS-TRANS-COUNT DISPLAY "Customer records : " WS-MASTER-COUNT DISPLAY "Backup records : " WS-BACKUP-COUNT DISPLAY "Volume changes : " WS-VOLUME-CHANGES DISPLAY "Total errors : " WS-ERROR-COUNT IF WS-ERROR-COUNT = 0 DISPLAY "All label operations completed successfully" ELSE DISPLAY "Some operations encountered errors" END-IF DISPLAY "Label processing demonstration completed". *> Additional label processing procedures ADVANCED-LABEL-OPERATIONS. DISPLAY "=== ADVANCED LABEL OPERATIONS ===" PERFORM DEMONSTRATE-GENERATION-DATA-GROUPS PERFORM DEMONSTRATE-CATALOG-INTEGRATION PERFORM DEMONSTRATE-RETENTION-PROCESSING. DEMONSTRATE-GENERATION-DATA-GROUPS. DISPLAY "Generation Data Group (GDG) Label Processing:" 01 WS-GDG-INFO. 05 WS-GDG-BASE PIC X(35) VALUE "PROD.TRANSACTION.HISTORY". 05 WS-GDG-GENERATION PIC S9(3) VALUE +1. 05 WS-GDG-VERSION PIC 9(2) VALUE 0. DISPLAY "Base name: " WS-GDG-BASE DISPLAY "Generation: " WS-GDG-GENERATION DISPLAY "Version: " WS-GDG-VERSION DISPLAY "Full dataset name: " WS-GDG-BASE ".G" WS-GDG-GENERATION "V" WS-GDG-VERSION. DEMONSTRATE-CATALOG-INTEGRATION. DISPLAY "Catalog Integration with Labels:" 01 WS-CATALOG-INFO. 05 WS-CATALOG-NAME PIC X(44). 05 WS-VOLUME-LIST PIC X(60). 05 WS-DATASET-TYPE PIC X(8). MOVE "MASTER.PROD.CATALOG" TO WS-CATALOG-NAME MOVE "VOL001,VOL002,VOL003" TO WS-VOLUME-LIST MOVE "VSAM" TO WS-DATASET-TYPE DISPLAY "Catalog: " WS-CATALOG-NAME DISPLAY "Volumes: " WS-VOLUME-LIST DISPLAY "Type: " WS-DATASET-TYPE. DEMONSTRATE-RETENTION-PROCESSING. DISPLAY "Retention Period Processing:" 01 WS-RETENTION-INFO. 05 WS-RETENTION-DAYS PIC 9(4) VALUE 2555. 05 WS-EXPIRY-DATE PIC 9(8). 05 WS-SCRATCH-DATE PIC 9(8). COMPUTE WS-EXPIRY-DATE = WS-CREATION-DATE + WS-RETENTION-DAYS MOVE WS-EXPIRY-DATE TO WS-SCRATCH-DATE DISPLAY "Creation date: " WS-CREATION-DATE DISPLAY "Retention days: " WS-RETENTION-DAYS DISPLAY "Expiry date: " WS-EXPIRY-DATE DISPLAY "Scratch date: " WS-SCRATCH-DATE.

LABEL Types and Usage

STANDARD Labels
  • • IBM standard label format
  • • Volume serial numbers
  • • Dataset identification
  • • System-managed processing
  • • Multi-volume support
OMITTED Labels
  • • No label processing
  • • Temporary files
  • • Work datasets
  • • External label management
  • • Performance optimization
User-Defined Labels
  • • Custom label routines
  • • Specialized processing
  • • Legacy system compatibility
  • • Non-standard formats
  • • Application-specific labels

Interactive Tutorial

Hands-On Exercise: Tape File Processing
Practice using LABEL clauses for different file types and scenarios

Exercise 1: Standard Tape File

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
FILE-CONTROL. SELECT PAYROLL-TAPE ASSIGN TO "PAYROLL.TAPE" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-PAYROLL-STATUS. FD PAYROLL-TAPE LABEL RECORDS ARE STANDARD BLOCK CONTAINS 50 RECORDS RECORD CONTAINS 120 CHARACTERS DATA RECORDS ARE PAYROLL-RECORD. 01 PAYROLL-RECORD. 05 EMP-ID PIC 9(6). 05 EMP-NAME PIC X(30). 05 GROSS-PAY PIC 9(8)V99. 05 DEDUCTIONS PIC 9(6)V99. 05 NET-PAY PIC 9(8)V99. 05 FILLER PIC X(68). PROCEDURE DIVISION. PROCESS-PAYROLL. OPEN INPUT PAYROLL-TAPE IF WS-PAYROLL-STATUS = "00" DISPLAY "Payroll tape opened with standard labels" PERFORM READ-PAYROLL-RECORDS ELSE DISPLAY "Label error: " WS-PAYROLL-STATUS END-IF CLOSE PAYROLL-TAPE.

Exercise 2: Unlabeled Work File

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
FILE-CONTROL. SELECT TEMP-WORK ASSIGN TO "TEMP.WORK" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-TEMP-STATUS. FD TEMP-WORK LABEL RECORDS ARE OMITTED RECORD CONTAINS 80 CHARACTERS DATA RECORDS ARE TEMP-RECORD. 01 TEMP-RECORD. 05 TEMP-KEY PIC X(10). 05 TEMP-DATA PIC X(65). 05 TEMP-FLAG PIC X(5). PROCEDURE DIVISION. PROCESS-TEMP-FILE. OPEN OUTPUT TEMP-WORK IF WS-TEMP-STATUS = "00" DISPLAY "Temporary file opened (no labels)" PERFORM WRITE-TEMP-RECORDS END-IF CLOSE TEMP-WORK.

Best Practices

Common Use Cases

Production Files
cobol
1
2
3
4
FD MASTER-FILE LABEL RECORDS ARE STANDARD BLOCK CONTAINS 100 RECORDS DATA RECORDS ARE MASTER-REC.
Temporary Files
cobol
1
2
3
4
FD TEMP-FILE LABEL RECORDS ARE OMITTED RECORD CONTAINS 80 CHARACTERS DATA RECORDS ARE TEMP-REC.

Knowledge Check

Test Your Understanding

Question 1: Standard Labels

When should you use LABEL RECORDS ARE STANDARD?

Answer: Use STANDARD labels for production tape files and datasets that require proper volume management, file identification, and system catalog integration. This ensures proper file tracking and multi-volume support.

Question 2: Omitted Labels

What types of files typically use OMITTED labels?

Answer: Temporary work files, scratch datasets, and files where label processing overhead is not needed typically use OMITTED labels. These are often short-lived files or those managed externally.

Question 3: Error Handling

How do you handle label-related errors in file processing?

Answer: Check file status codes after OPEN operations, implement proper error handling for volume mount issues, validate dataset names, and provide meaningful error messages for label processing failures.