- In ILE RPG you can read a record in a file opened for update, and
created or overridden with SHARE(*YES), and then update this locked
record in another program that has opened the same file for update.
- If a program performs a sequential input operation,
and it results in an end-of-file condition, the normal operation is
for any subsequent sequential input operation in the same module to
immediately result in an end-of-file condition without any physical
input request to the database. However, if the file is shared, the
RPG runtime will always send a physical input request to the database,
and the input operation will be successful if the file has been repositioned
by a call to another program or module using the shared file.
- You cannot modify the MR indicator using the MOVE or SETON operations.
(RPG III only prevents using SETON with MR.)
- The File Type entry on the File specification no longer dictates
the type of I/O operations that must be present in the calculation
specifications.
For example, in RPG III, if you define a file as
an update file, then you must have an UPDAT operation later in the
program. This is no longer true in RPG IV. However, your file definition
still must be consistent with the I/O operations present in the program.
So if you have an UPDATE operation in your source, the file must be
defined as an update file.
- ILE RPG will allow record blocking even if the COMMIT keyword is
specified on the file description specification.
- In RPG IV, a file opened for update will also be opened as delete
capable. You do not need any DELETE operations to make it delete capable.
- In RPG IV, you do not have to code an actual number for the
number of devices that will be used by a multiple-device file. If
you specify MAXDEV(*FILE) on a file description specification, then
the number of save areas created for SAVEDS and SAVEIND is based on
the number of devices that your file can handle. (The SAVEDS, SAVEIND,
and MAXDEV keywords on an RPG IV file description specification
correspond to the SAVDS, IND, and NUM options on a RPG III file description
specification continuation line, respectively.)
In ILE RPG, the
total number of program devices that can be acquired by the program
cannot be different from the maximum number of devices defined in
the device file. OPM RPG/400® allows
this through the NUM option.
- In ILE RPG, the ACQ and REL operation codes can be used with single
device files.
- In ILE RPG, the relative record number and key fields in the database-specific
feedback section of the INFDS are updated on each input operation
when doing blocked reads.
- When a referential constraint error occurs in OPM RPG/400, the status code is set
to "01299" (I/O error). In ILE RPG, the status code is set to "01022",
"01222", or "01299", depending on the type of referential constraint
error that occurs:
- If data management is not able to allocate a record due to a referential
constraint error, a CPF502E notify message is issued. ILE RPG will
set the status code to "01222" and OPM RPG/400 will set the status code to "01299".
If
you have no error indicator, 'E' extender, or INFSR error subroutine, ILE RPG will
issue the RNQ1222 inquiry message, and OPM RPG/400 will issue the RPG1299 inquiry message.
The main difference between these two messages is that RNQ1222 allows
you to retry the operation.
- If data management detects a referential constraint error that
has caused it to issue either a CPF503A, CPF502D, or CPF502F notify
message, ILE RPG will set the status code to "01022" and OPM RPG/400 will set the status
code to "01299".
If you have no error indicator, 'E' extender,
or INFSR error subroutine, ILE RPG will issue the RNQ1022 inquiry message,
and OPM RPG will issue the RPG1299 inquiry message.
- All referential constraint errors detected by data management
that cause data management to issue an escape message will cause both
OPM and ILE RPG to set the status code to "01299".
- In ILE RPG, the database-specific feedback section of the INFDS
is updated regardless of the outcome of the I/O operation. In OPM RPG/400, this feedback section
is not updated if the record-not-found condition is encountered.
- ILE RPG relies more on data-management error handling than does
OPM RPG/400. This means
that in some cases you will find certain error messages in the job
log of an ILE RPG program, but not an OPM RPG/400 program. Some differences you will notice
in error handling are:
- When doing an UPDATE on a record in a database file that has not
been locked by a previous input operation, both ILE RPG and OPM RPG/400 set the status code
to "01211". ILE RPG detects this situation when data management issues
a CPF501B notify message and places it in the job log.
- When handling WORKSTN files and trying to do I/O to a device that
has not been acquired or defined, both ILE and OPM RPG will set the
status to "01281". ILE RPG detects this situation when data management
issues a CPF5068 escape message and places it in the job log.
- When doing READE, REDPE (READPE in ILE), SETLL on a database file,
or when doing sequential-within-limits processing by a record-address-file,
OPM RPG/400 does key comparisons
using the *HEX collating sequence. This may give different results
than expected when DDS features are used that cause more than one
search argument to match a given key in the file.
For example,
if ABSVAL is used on a numeric key, both -1 and 1 would succeed as
search arguments for a key in the file with a value of 1. Using the
hexadecimal collating sequence, a search argument of -1 will not succeed
for an actual key of 1.
ILE RPG does key comparisons using *HEX
collating sequence only for pre-V3R1 DDM files. See Using Pre-V3R1 DDM Files for
more information.
- ILE RPG allows the To File and the From File specified for prerun-time
arrays and tables to be different. In OPM RPG, both file names must
be the same; if they are different the diagnostic message QRG3038
is issued.
- When translation of a RAF-Controlled file is specified, the results
using ILE RPG may differ from OPM RPG/400, depending on the translation
table. This is due to the different sequence of operations. In OPM RPG/400 the
sequence is: retrieve record, translate and compare; in ILE RPG the
sequence is: translate, compare and retrieve record.
- The RPG/400 compiler
considers the DELET operation to be an output operation. If an update-capable
record format has a DELET operation and a CLEAR or RESET operation,
but no UPDAT operation, the RPG/400 compiler
will clear or reset the fields of the record format, but the ILE
RPG compiler will not clear or reset the fields. To have the ILE
RPG compiler clear or reset the fields, *ALL can be specified in
Factor 2 of the operation, or an UPDATE operation can be added to
the program.