When a record is read by a program, it is read in one of two modes: input
or update. If a program reads a record for update, a lock is placed on that
record. Another program cannot read the same record for update until the first
program releases that lock. If a program reads a record for input, no lock
is placed on the record. A record that is locked by one program can be read
for input by another program.
In RPG IV programs, you use an update file to read records for update.
A record read from a file with a type other than update can be read for inquiry
only. By default, any record that is read from an update file will be read
for update. For update files, you can specify that a record be read for input
by using one of the input operations CHAIN, READ, READE, READP, or READPE
and specifying an operation code extender (N) in the operation code field
following the operation code name.
When a record is locked by an RPG IV program, that lock remains until
one of the following occurs:
If your program reads a record for update and that record is locked through
another program in your job or through another job, your read operation will
wait until the record is unlocked (except in the case of shared files, see
Sharing an Open Data Path). If the wait time exceeds that specified on the WAITRCD parameter
of the file, an exception occurs. If your program does not handle this exception
(RNX1218) then the default error handler is given control when a record lock
timeout occurs, an RNQ1218 inquiry message will be issued. One of the options
listed for this message is to retry the operation on which the timeout occurred. This will cause the
operation on which the timeout occurred to be re-issued, allowing the program
to continue as if the record lock timeout had not occurred. Note that if the
file has an INFSR specified in which an I/O operation is performed on the
file before the default error handler is given control, unexpected results
can occur if the input operation that is retried is a sequential operation,
since the file cursor may have been modified.
Note: Subprocedures
do not get inquiry message, and so this situation should be handled by using
an error indicator on the read operation and checking for status 1218 following
the read.
If no changes are required to a locked record, you can release it from
its locked state, without modifying the file cursor, by using the UNLOCK operation
or by processing output operations defined by output specifications with no
field names included. These output operations can be processed by EXCEPT output,
detail output, or total output.
(There are exceptions to these rules when operating under commitment control.
See Using Commitment Control for more information.)