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