Created On:  2010-03-31

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.