S0C4 in DBINRPR or failure in REDKL command in COBOL.
-1- Check if you have all the APAR related to module DBINRPR . DBINRPR is the interface module between the application and the Multi-User.
-2- Check that the RQA is large enough:
"The CA Datacom Programming Guide mentioned the 180 bytes needed for key in the RQA at different places:
The Request Area format for record-at-a-time commands differs from that for set-at-a-time commands. In both cases, however, you must make a total of 256 Request Area bytes available (76 bytes plus 180 bytes for the Request Area's key area)."
And when using key range:
"You must reserve the second 180 bytes for the ending key value. If you do not reserve the second 180 bytes for the ending key value and the Request Area is the last item loaded in the program, an addressing exception could occur and the program abend."
"For record-at-a-time commands, the size of the Request Area's key area (which is used to contain key values) must be large enough to accommodate the key values being requested. (The full 180 bytes must be addressable because the key area is moved to local CA Datacom/DB storage during processing.) For set-at-a-time commands, 180 bytes must always be available in the Request Area's key area field because with set-at-a-time commands the system uses the key area field for access purposes."
Level2 made the diagnostic as follow:
"The S0C4 occurs when moving the 180 byte key area from the user's request area to an internal field in DB. If the entire 180 bytes are contained in a page in memory, the move is successful even if not all of the 180 bytes are in the programs working storage. However, if for some reason the 180 byte key field extends beyond a page boundary into a page that is not currently defined in the operating system, the S0C4 abend occurs. Any change in the program, the operating system or the memory allocation pattern can cause the key area to be allocated close to a page boundary causing the error. "
From CA Datacom Programming Guide 14.0, especially page 41 about Key value (Description of Call parameters)
"....The program abends, however, if the moved key extends into unaddressable memory, which could happen, for example, if a program had a key at the end of working storage on a page boundary. You can avoid the possibility of such an abend by reserving the full 180 bytes for a key area or 360 bytes for a key range."
Please see the Record At a Time documentation for more details. Page down until:
Note: The key value must follow the previously listed rules and have 180 bytes of addressable storage available after the beginning of the key value (360 bytes if the command code specifies a key range). If a key gets moved from a key value before the length is known from the MUF, the maximum 180 bytes (360 for a key range) get moved. The program abends, however, if the moved key extends into unaddressable memory, which could happen, for example, if a program had a key at the end of working storage on a page boundary. You can avoid the possibility of such an abend by reserving the full 180 bytes for a key area or 360 bytes for a key range.