- 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.