For applications that use an OBTAIN ... USING on R16 or prior releases, upgrading to a more current release could cause an unexpected 0363 abend in that application.
On R16.0 and earlier releases, the specification of multiple sort keys was accepted by the preprocessor in an OBTAIN USING command. However, even though that syntax was accepted, the DBMS would actually only recognize the first parameter in the list. For example, if the total key length was 100 bytes then DBMS would look at the 100 bytes starting from the address passed as the first USING parameter. If the other sortkey fields listed in the OBTAIN USING statement were contiguous, then it would appear that the command was working as coded. This was corrected to give the 63 minor code in R16.0 via an APAR and changed under 17.0 in source. If a site did not have that APAR applied on R16.0, then any upgrade to a later release would cause this 0363 to appear in dialogs and programs using this syntax.
This was also changed in the preprocessors, so that they would flag the statement as containing a syntax error. From the 17.0 Release Summary:
8.7 FIND/OBTAIN WITHIN SET USING SORT KEY DML Statement
A COBOL program containing the FIND/OBTAIN WITHIN SET USING SORT KEY DML statement might compile with a syntax error although it compiled successfully on a prior release. CA IDMS now ensures compliance with the following rules when processing a FIND/OBTAIN WITHIN SET USING SORT KEY DML statement:
You cannot specify multiple field names as the sort key in the USING clause.
You must terminate the DML statement with a period or semicolon after specifying the sort key in the USING clause, unless the statement is followed by an ON clause. The IDMSDMLC precompiler is enhanced to detect extra parameters and issue a syntax error at precompile time. This precompile will get a DML004 syntax error. There is an apar that will change the generic DML004 to a more specific DML084 "Missing Terminator" for release 17.0.