Problem:
When the WITH LOCK ON MULTIPLE RECORDS clause is specified for a file, we would like to unlock a specific record.
Resolution:
When the program locks several records, the one of the following statement releases all record locks :
CLOSE the file
COMMIT
ROLLBACK
UNLOCK
An explicit call to the File Handler allows to release the lock of one record .
To use this explicit call it is necessary to :
Allocate data areas for the File Contrel Description ( FCD)
Compile the program with the FCDREG directive
The syntax of the explicit call is :
CALL "EXTFH" USING OPCODE FCD
OPCODE : file handler operation code : PIC XX VALUE X"FA0F".
FCD : The data area that must be intialize to the specific locked record
Example of the program :
SELECT F1 ASSIGN "FF1"
ORGANIZATION INDEXED
LOCK MODE MANUAL WITH LOCK ON MULTIPLE RECORD
RECORD F1-CLEF
ACCESS DYNAMIC
STATUS F1-STAT .
FD F1.
01 F1-ENR.
02 F1-CLEF PIC 9(4).
02 F1-ZONE1 PIC 9(8).
02 F1-ZONE2 PIC X(68).
WORKING-STORAGE SECTION.
01 F1-STAT PIC XX.
01 F1-SA REDEFINES F1-STAT .
02 F1-SA1 PIC X.
02 F1-SA2 PIC X COMP-X.
01 CHOIX PIC X.
01 OPERA PIC XX VALUE X"FA0F".
LINKAGE SECTION .
01 LINK1 .
COPY "XFHFCD.CPY".
PROCEDURE DIVISION.
OPEN I-O F1 .
SET address of link1 to address of fh--fcd of F1.
MOVE " " TO CHOIX .
A001.
DISPLAY " 1 : READ ".
DISPLAY " 2 : REWRITE ".
DISPLAY " 3 : UNLOCK ".
DISPLAY " Q : QUIT".
DISPLAY " CHOICE"
ACCEPT CHOIX
EVALUATE CHOIX
WHEN "1" PERFORM A002
WHEN "2" PERFORM A003
WHEN "3" PERFORM A004
WHEN "Q" PERFORM A005
END-EVALUATE .
GO TO A001.
A002.
DISPLAY " Key ( 1 - 11 ) "
ACCEPT F1-CLEF
READ F1 WITH LOCK.
PERFORM A999.
A003.
ACCEPT F1-ZONE1 FROM TIME.
REWRITE F1-ENR.
PERFORM A999.
A004.
CALL "EXTFH" USING OPERA LINK1.
CONTINUE.
A005.
CLOSE F1 .
STOP RUN.
A999.
IF F1-SA1 EQUAL "9"
DISPLAY "Status <" F1-SA1 "/" F1-SA2 ">"
ELSE
DISPLAY "Status <" F1-STAT ">"
END-IF.