MainframeMaster

COBOL Tutorial

COBOL SAME Clause - Quick Reference

Progress0 of 0 lessons

Overview

The SAME clause is used to specify that multiple files share the same record area in memory. This conserves memory by allowing different files to use the same physical memory location for their record descriptions.

Purpose and Usage

  • Memory conservation - Share record areas between files
  • Resource optimization - Reduce memory usage
  • File management - Efficient file handling
  • Batch processing - Optimize batch operations
  • Storage efficiency - Maximize memory utilization

Memory Sharing Concept

Without SAME:
File A: [Record Area A]
File B: [Record Area B]
File C: [Record Area C]
With SAME:
File A: [Shared Record Area]
File B: [Shared Record Area]
File C: [Shared Record Area]

SAME allows multiple files to share the same memory area.

Syntax

The SAME clause is used in the FILE SECTION to specify shared record areas.

Basic Syntax

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
* Basic SAME clause syntax FD file-name-1. 01 record-name-1. * record description FD file-name-2 SAME RECORD AREA AS file-name-1. 01 record-name-2. * record description * Complete example IDENTIFICATION DIVISION. PROGRAM-ID. SAME-EXAMPLE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INPUT-FILE ASSIGN TO "INPUT.DAT" ORGANIZATION IS SEQUENTIAL. SELECT OUTPUT-FILE ASSIGN TO "OUTPUT.DAT" ORGANIZATION IS SEQUENTIAL. SELECT TEMP-FILE ASSIGN TO "TEMP.DAT" ORGANIZATION IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD INPUT-FILE. 01 INPUT-RECORD. 05 CUSTOMER-ID PIC 9(6). 05 CUSTOMER-NAME PIC X(30). 05 CUSTOMER-BALANCE PIC 9(8)V99. FD OUTPUT-FILE SAME RECORD AREA AS INPUT-FILE. 01 OUTPUT-RECORD. 05 CUST-ID PIC 9(6). 05 CUST-NAME PIC X(30). 05 CUST-BALANCE PIC 9(8)V99. FD TEMP-FILE SAME RECORD AREA AS INPUT-FILE. 01 TEMP-RECORD. 05 TEMP-ID PIC 9(6). 05 TEMP-NAME PIC X(30). 05 TEMP-BALANCE PIC 9(8)V99. PROCEDURE DIVISION. MAIN-LOGIC. OPEN INPUT INPUT-FILE OPEN OUTPUT OUTPUT-FILE OPEN OUTPUT TEMP-FILE PERFORM PROCESS-RECORDS CLOSE INPUT-FILE OUTPUT-FILE TEMP-FILE STOP RUN. PROCESS-RECORDS. READ INPUT-FILE AT END EXIT PARAGRAPH END-READ * Process record using shared area IF CUSTOMER-BALANCE > 1000 WRITE OUTPUT-RECORD FROM INPUT-RECORD ELSE WRITE TEMP-RECORD FROM INPUT-RECORD END-IF GO TO PROCESS-RECORDS.

SAME RECORD AREA allows files to share memory space.

SAME vs Separate Record Areas

ApproachMemory UsageFile Access
SAME RECORD AREAConservedSequential
Separate AreasMore memorySimultaneous
Mixed ApproachBalancedFlexible

Practical Examples

These examples demonstrate how to use the SAME clause effectively in different file processing scenarios.

Data Processing Pipeline

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
IDENTIFICATION DIVISION. PROGRAM-ID. DATA-PIPELINE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT RAW-DATA ASSIGN TO "RAW.DAT" ORGANIZATION IS SEQUENTIAL. SELECT VALID-DATA ASSIGN TO "VALID.DAT" ORGANIZATION IS SEQUENTIAL. SELECT INVALID-DATA ASSIGN TO "INVALID.DAT" ORGANIZATION IS SEQUENTIAL. SELECT PROCESSED-DATA ASSIGN TO "PROCESSED.DAT" ORGANIZATION IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD RAW-DATA. 01 RAW-RECORD. 05 DATA-ID PIC 9(6). 05 DATA-VALUE PIC X(50). 05 DATA-STATUS PIC X(1). FD VALID-DATA SAME RECORD AREA AS RAW-DATA. 01 VALID-RECORD. 05 VALID-ID PIC 9(6). 05 VALID-VALUE PIC X(50). 05 VALID-STATUS PIC X(1). FD INVALID-DATA SAME RECORD AREA AS RAW-DATA. 01 INVALID-RECORD. 05 INVALID-ID PIC 9(6). 05 INVALID-VALUE PIC X(50). 05 INVALID-STATUS PIC X(1). FD PROCESSED-DATA SAME RECORD AREA AS RAW-DATA. 01 PROCESSED-RECORD. 05 PROCESSED-ID PIC 9(6). 05 PROCESSED-VALUE PIC X(50). 05 PROCESSED-STATUS PIC X(1). PROCEDURE DIVISION. MAIN-LOGIC. OPEN INPUT RAW-DATA OPEN OUTPUT VALID-DATA INVALID-DATA PROCESSED-DATA PERFORM PROCESS-DATA-PIPELINE CLOSE RAW-DATA VALID-DATA INVALID-DATA PROCESSED-DATA STOP RUN. PROCESS-DATA-PIPELINE. READ RAW-DATA AT END EXIT PARAGRAPH END-READ * Validate data IF DATA-STATUS = "V" WRITE VALID-RECORD FROM RAW-RECORD PERFORM PROCESS-VALID-DATA ELSE WRITE INVALID-RECORD FROM RAW-RECORD END-IF GO TO PROCESS-DATA-PIPELINE. PROCESS-VALID-DATA. * Process valid data using shared record area MOVE "P" TO DATA-STATUS WRITE PROCESSED-RECORD FROM RAW-RECORD.

SAME enables efficient data processing pipelines.

File Conversion

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
* File conversion with SAME RECORD AREA DATA DIVISION. FILE SECTION. FD OLD-FORMAT. 01 OLD-RECORD. 05 OLD-ID PIC 9(6). 05 OLD-NAME PIC X(20). 05 OLD-ADDRESS PIC X(30). 05 OLD-PHONE PIC X(10). FD NEW-FORMAT SAME RECORD AREA AS OLD-FORMAT. 01 NEW-RECORD. 05 NEW-ID PIC 9(6). 05 NEW-NAME PIC X(25). 05 NEW-ADDRESS PIC X(40). 05 NEW-PHONE PIC X(15). 05 NEW-EMAIL PIC X(30). FD ERROR-FILE SAME RECORD AREA AS OLD-FORMAT. 01 ERROR-RECORD. 05 ERROR-ID PIC 9(6). 05 ERROR-NAME PIC X(20). 05 ERROR-ADDRESS PIC X(30). 05 ERROR-PHONE PIC X(10). PROCEDURE DIVISION. CONVERT-FILES. OPEN INPUT OLD-FORMAT OPEN OUTPUT NEW-FORMAT ERROR-FILE PERFORM CONVERT-RECORDS CLOSE OLD-FORMAT NEW-FORMAT ERROR-FILE. CONVERT-RECORDS. READ OLD-FORMAT AT END EXIT PARAGRAPH END-READ * Convert record format IF OLD-NAME NOT = SPACES MOVE OLD-ID TO NEW-ID MOVE OLD-NAME TO NEW-NAME MOVE OLD-ADDRESS TO NEW-ADDRESS MOVE OLD-PHONE TO NEW-PHONE MOVE SPACES TO NEW-EMAIL WRITE NEW-RECORD ELSE WRITE ERROR-RECORD FROM OLD-RECORD END-IF GO TO CONVERT-RECORDS.

SAME facilitates efficient file format conversion.

Data Filtering

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
* Data filtering with SAME RECORD AREA DATA DIVISION. FILE SECTION. FD MASTER-FILE. 01 MASTER-RECORD. 05 MASTER-ID PIC 9(6). 05 MASTER-NAME PIC X(30). 05 MASTER-STATUS PIC X(1). 05 MASTER-BALANCE PIC 9(8)V99. FD ACTIVE-FILE SAME RECORD AREA AS MASTER-FILE. 01 ACTIVE-RECORD. 05 ACTIVE-ID PIC 9(6). 05 ACTIVE-NAME PIC X(30). 05 ACTIVE-STATUS PIC X(1). 05 ACTIVE-BALANCE PIC 9(8)V99. FD INACTIVE-FILE SAME RECORD AREA AS MASTER-FILE. 01 INACTIVE-RECORD. 05 INACTIVE-ID PIC 9(6). 05 INACTIVE-NAME PIC X(30). 05 INACTIVE-STATUS PIC X(1). 05 INACTIVE-BALANCE PIC 9(8)V99. FD HIGH-BALANCE-FILE SAME RECORD AREA AS MASTER-FILE. 01 HIGH-BALANCE-RECORD. 05 HIGH-BALANCE-ID PIC 9(6). 05 HIGH-BALANCE-NAME PIC X(30). 05 HIGH-BALANCE-STATUS PIC X(1). 05 HIGH-BALANCE-AMOUNT PIC 9(8)V99. PROCEDURE DIVISION. FILTER-DATA. OPEN INPUT MASTER-FILE OPEN OUTPUT ACTIVE-FILE INACTIVE-FILE HIGH-BALANCE-FILE PERFORM FILTER-RECORDS CLOSE MASTER-FILE ACTIVE-FILE INACTIVE-FILE HIGH-BALANCE-FILE. FILTER-RECORDS. READ MASTER-FILE AT END EXIT PARAGRAPH END-READ * Filter based on status and balance EVALUATE MASTER-STATUS WHEN "A" WRITE ACTIVE-RECORD FROM MASTER-RECORD IF MASTER-BALANCE > 10000 WRITE HIGH-BALANCE-RECORD FROM MASTER-RECORD END-IF WHEN "I" WRITE INACTIVE-RECORD FROM MASTER-RECORD WHEN OTHER WRITE INACTIVE-RECORD FROM MASTER-RECORD END-EVALUATE GO TO FILTER-RECORDS.

SAME enables efficient data filtering operations.

Backup and Archive

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
* Backup and archive with SAME RECORD AREA DATA DIVISION. FILE SECTION. FD CURRENT-FILE. 01 CURRENT-RECORD. 05 CURRENT-ID PIC 9(6). 05 CURRENT-DATA PIC X(100). 05 CURRENT-DATE PIC X(8). FD BACKUP-FILE SAME RECORD AREA AS CURRENT-FILE. 01 BACKUP-RECORD. 05 BACKUP-ID PIC 9(6). 05 BACKUP-DATA PIC X(100). 05 BACKUP-DATE PIC X(8). FD ARCHIVE-FILE SAME RECORD AREA AS CURRENT-FILE. 01 ARCHIVE-RECORD. 05 ARCHIVE-ID PIC 9(6). 05 ARCHIVE-DATA PIC X(100). 05 ARCHIVE-DATE PIC X(8). PROCEDURE DIVISION. BACKUP-AND-ARCHIVE. OPEN INPUT CURRENT-FILE OPEN OUTPUT BACKUP-FILE ARCHIVE-FILE PERFORM PROCESS-RECORDS CLOSE CURRENT-FILE BACKUP-FILE ARCHIVE-FILE. PROCESS-RECORDS. READ CURRENT-FILE AT END EXIT PARAGRAPH END-READ * Create backup WRITE BACKUP-RECORD FROM CURRENT-RECORD * Archive old records IF CURRENT-DATE < "20230101" WRITE ARCHIVE-RECORD FROM CURRENT-RECORD END-IF GO TO PROCESS-RECORDS.

SAME facilitates efficient backup and archive operations.

Best Practices and Considerations

Understanding best practices ensures effective use of the SAME clause.

Best Practices

  • Use with compatible records - Ensure record structures are compatible
  • Plan file operations - Only one file can be active at a time
  • Close files properly - Ensure proper file closure
  • Test thoroughly - Verify SAME behavior with your data
  • Document usage - Clearly document SAME relationships
  • Consider alternatives - Evaluate when SAME is appropriate

Use Case Comparison

Use CaseSAME BenefitsConsiderations
Memory ConservationReduces memory usageSequential file access
Batch ProcessingEfficient processingFile switching overhead
Data ConversionShared record areaRecord compatibility
File FilteringMultiple output filesSequential processing

Performance Considerations

  • Memory efficiency - SAME conserves memory resources
  • File switching - Only one file active at a time
  • Processing overhead - File open/close operations
  • Record compatibility - Must ensure compatible structures
  • Error handling - Careful handling of shared areas

SAME Clause Quick Reference

UsageSyntaxExample
Basic SAMEFD file2 SAME RECORD AREA AS file1FD OUTPUT SAME RECORD AREA AS INPUT
Multiple filesFD file3 SAME RECORD AREA AS file1FD TEMP SAME RECORD AREA AS INPUT
Different namesFD file2 SAME RECORD AREA AS file1FD NEW SAME RECORD AREA AS OLD
File operationsOPEN/CLOSE files sequentiallyOPEN INPUT1 CLOSE INPUT1 OPEN INPUT2
Record sharingUse shared record areaMOVE data between files

Test Your Knowledge

1. What is the primary purpose of the SAME clause in COBOL?

  • To compare two values for equality
  • To share record areas between files
  • To create identical copies of data
  • To sort data in the same order

2. In which COBOL section is the SAME clause typically used?

  • IDENTIFICATION DIVISION
  • ENVIRONMENT DIVISION
  • DATA DIVISION
  • PROCEDURE DIVISION

3. What is the main benefit of using the SAME clause?

  • Improved performance
  • Memory conservation
  • Better data organization
  • Enhanced security

4. Can SAME be used with all file organization types?

  • Yes, with all file types
  • Only with sequential files
  • Only with indexed files
  • Only with relative files

5. What happens when files share the same record area?

  • They become identical
  • They share the same memory location
  • They are automatically synchronized
  • They are merged into one file

Frequently Asked Questions