The REWRITE statement is used to update existing records in a file. It replaces the content of the current record (established by a previous READ) with new data while maintaining the same record position in the file.
REWRITE updates the current record while maintaining its position.
The REWRITE statement follows a specific pattern and requires proper file setup.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051* Basic REWRITE syntax REWRITE record-name FROM data-item * With error handling REWRITE record-name FROM data-item ON EXCEPTION PERFORM ERROR-HANDLING END-REWRITE * Complete example IDENTIFICATION DIVISION. PROGRAM-ID. REWRITE-EXAMPLE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMERS.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD CUSTOMER-FILE. 01 CUSTOMER-RECORD. 05 CUST-ID PIC 9(6). 05 CUST-NAME PIC X(30). 05 CUST-BALANCE PIC 9(8)V99. WORKING-STORAGE SECTION. 01 UPDATED-RECORD. 05 UPD-CUST-ID PIC 9(6). 05 UPD-CUST-NAME PIC X(30). 05 UPD-CUST-BALANCE PIC 9(8)V99. PROCEDURE DIVISION. MAIN-LOGIC. OPEN I-O CUSTOMER-FILE READ CUSTOMER-FILE AT END DISPLAY "No records found" CLOSE CUSTOMER-FILE STOP RUN END-READ * Update the record MOVE CUSTOMER-RECORD TO UPDATED-RECORD ADD 50 TO UPD-CUST-BALANCE REWRITE CUSTOMER-RECORD FROM UPDATED-RECORD CLOSE CUSTOMER-FILE STOP RUN.
REWRITE requires a previous READ and proper file mode (I-O).
Statement | Purpose | Requirement |
---|---|---|
REWRITE | Update existing record | Previous READ required |
WRITE | Create new record | No READ required |
DELETE | Remove record | Previous READ required |
These examples demonstrate how to use the REWRITE statement effectively in different update scenarios.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061IDENTIFICATION DIVISION. PROGRAM-ID. UPDATE-CUSTOMER-BALANCE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMERS.DAT" ORGANIZATION IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD CUSTOMER-FILE. 01 CUSTOMER-RECORD. 05 CUST-ID PIC 9(6). 05 CUST-NAME PIC X(30). 05 CUST-BALANCE PIC 9(8)V99. 05 CUST-STATUS PIC X(1). WORKING-STORAGE SECTION. 01 SEARCH-ID PIC 9(6). 01 UPDATE-AMOUNT PIC 9(8)V99. 01 FOUND-FLAG PIC X(1) VALUE "N". PROCEDURE DIVISION. MAIN-LOGIC. DISPLAY "Enter customer ID to update: " ACCEPT SEARCH-ID DISPLAY "Enter amount to add: " ACCEPT UPDATE-AMOUNT OPEN I-O CUSTOMER-FILE PERFORM FIND-AND-UPDATE-CUSTOMER IF FOUND-FLAG = "N" DISPLAY "Customer not found" END-IF CLOSE CUSTOMER-FILE STOP RUN. FIND-AND-UPDATE-CUSTOMER. READ CUSTOMER-FILE AT END EXIT PARAGRAPH END-READ IF CUST-ID = SEARCH-ID MOVE "Y" TO FOUND-FLAG ADD UPDATE-AMOUNT TO CUST-BALANCE * Update status if balance exceeds limit IF CUST-BALANCE > 10000 MOVE "H" TO CUST-STATUS END-IF REWRITE CUSTOMER-RECORD DISPLAY "Customer updated successfully" ELSE GO TO FIND-AND-UPDATE-CUSTOMER END-IF.
REWRITE updates customer balance and status based on business rules.
12345678910111213141516171819202122232425262728293031323334353637383940414243* Inventory update with REWRITE DATA DIVISION. FILE SECTION. FD INVENTORY-FILE. 01 INVENTORY-RECORD. 05 ITEM-CODE PIC X(10). 05 ITEM-DESC PIC X(40). 05 QUANTITY PIC 9(6). 05 REORDER-LEVEL PIC 9(6). 05 LAST-UPDATE PIC X(8). WORKING-STORAGE SECTION. 01 UPDATE-QUANTITY PIC 9(6). 01 CURRENT-DATE PIC X(8). PROCEDURE DIVISION. UPDATE-INVENTORY. MOVE FUNCTION CURRENT-DATE TO CURRENT-DATE OPEN I-O INVENTORY-FILE PERFORM UPDATE-INVENTORY-LOOP CLOSE INVENTORY-FILE. UPDATE-INVENTORY-LOOP. READ INVENTORY-FILE AT END EXIT PARAGRAPH END-READ * Update quantity based on business logic IF QUANTITY < REORDER-LEVEL MOVE REORDER-LEVEL TO UPDATE-QUANTITY ADD 100 TO UPDATE-QUANTITY MOVE UPDATE-QUANTITY TO QUANTITY MOVE CURRENT-DATE TO LAST-UPDATE REWRITE INVENTORY-RECORD DISPLAY "Updated: " ITEM-CODE " - New Qty: " QUANTITY END-IF GO TO UPDATE-INVENTORY-LOOP.
REWRITE updates inventory quantities and timestamps automatically.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859* Transaction status update DATA DIVISION. FILE SECTION. FD TRANSACTION-FILE. 01 TRANSACTION-RECORD. 05 TRANS-ID PIC 9(10). 05 TRANS-AMOUNT PIC 9(8)V99. 05 TRANS-STATUS PIC X(1). 05 PROCESS-DATE PIC X(8). 05 ERROR-CODE PIC X(3). WORKING-STORAGE SECTION. 01 PROCESS-STATUS PIC X(1) VALUE "P". PROCEDURE DIVISION. PROCESS-TRANSACTIONS. OPEN I-O TRANSACTION-FILE PERFORM PROCESS-TRANSACTION-LOOP CLOSE TRANSACTION-FILE. PROCESS-TRANSACTION-LOOP. READ TRANSACTION-FILE AT END EXIT PARAGRAPH END-READ * Process based on status EVALUATE TRANS-STATUS WHEN "P" * Pending PERFORM PROCESS-PENDING-TRANSACTION WHEN "E" * Error PERFORM RETRY-ERROR-TRANSACTION WHEN "C" * Complete CONTINUE END-EVALUATE GO TO PROCESS-TRANSACTION-LOOP. PROCESS-PENDING-TRANSACTION. * Simulate processing IF TRANS-AMOUNT > 1000 MOVE "E" TO TRANS-STATUS MOVE "001" TO ERROR-CODE ELSE MOVE "C" TO TRANS-STATUS MOVE FUNCTION CURRENT-DATE TO PROCESS-DATE END-IF REWRITE TRANSACTION-RECORD. RETRY-ERROR-TRANSACTION. * Retry logic for error transactions IF ERROR-CODE = "001" MOVE "P" TO TRANS-STATUS MOVE SPACES TO ERROR-CODE REWRITE TRANSACTION-RECORD END-IF.
REWRITE updates transaction status and error codes during processing.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647* Data correction with validation DATA DIVISION. FILE SECTION. FD EMPLOYEE-FILE. 01 EMPLOYEE-RECORD. 05 EMP-ID PIC 9(6). 05 EMP-NAME PIC X(30). 05 EMP-SALARY PIC 9(8)V99. 05 EMP-DEPT PIC X(3). 05 VALID-FLAG PIC X(1). WORKING-STORAGE SECTION. 01 CORRECTION-COUNT PIC 9(3) VALUE ZERO. PROCEDURE DIVISION. CORRECT-EMPLOYEE-DATA. OPEN I-O EMPLOYEE-FILE PERFORM CORRECT-DATA-LOOP DISPLAY "Records corrected: " CORRECTION-COUNT CLOSE EMPLOYEE-FILE. CORRECT-DATA-LOOP. READ EMPLOYEE-FILE AT END EXIT PARAGRAPH END-READ * Check for data issues and correct IF EMP-SALARY = ZERO MOVE 25000 TO EMP-SALARY MOVE "Y" TO VALID-FLAG REWRITE EMPLOYEE-RECORD ADD 1 TO CORRECTION-COUNT DISPLAY "Corrected salary for: " EMP-NAME END-IF IF EMP-DEPT = SPACES MOVE "GEN" TO EMP-DEPT MOVE "Y" TO VALID-FLAG REWRITE EMPLOYEE-RECORD ADD 1 TO CORRECTION-COUNT DISPLAY "Added department for: " EMP-NAME END-IF GO TO CORRECT-DATA-LOOP.
REWRITE corrects data errors and validates record integrity.
Understanding best practices ensures reliable and efficient use of the REWRITE statement.
File Organization | REWRITE Behavior | Considerations |
---|---|---|
Sequential | Updates current record | Must read sequentially |
Relative | Updates by record number | Can use READ with key |
Indexed | Updates by key | Key must remain same |
Usage | Syntax | Example |
---|---|---|
Basic REWRITE | REWRITE record-name | REWRITE CUSTOMER-RECORD |
With FROM clause | REWRITE record-name FROM data-item | REWRITE CUSTOMER-RECORD FROM UPDATED-DATA |
With error handling | REWRITE record-name ON EXCEPTION... | REWRITE RECORD ON EXCEPTION PERFORM ERROR-HANDLING |
After READ | READ... REWRITE... | READ FILE... REWRITE RECORD... |
Conditional update | IF condition REWRITE record-name | IF VALID-DATA REWRITE CUSTOMER-RECORD |
1. What is the primary purpose of the REWRITE statement in COBOL?
2. What must be done before using REWRITE?
3. Which file organization types support REWRITE?
4. What happens if you REWRITE without first reading a record?
5. How does REWRITE differ from WRITE?