If an IDMS record is included in a subschema, and a new index is added to facilitate access to that record, does a COBOL program that accesses the record need to be recompiled?
COBOL programs accessing CA IDMS network records must include a subschema that describes the portion of the database they want to access. Sometimes those record definitions will be modified. Adding an index to provide efficient access to a record is a common example of this type modification.
If the only change being made to a record is the addition of an index, then the record data length isn't changed; only the length of the record prefix (which will contain pointers for the index) is changed. A change in the data length of the record would require a recompile; a change in the prefix length does not.
However, an index is often added into it's own index area for efficiency at run-time. If the new index is defined in a new area, then any subschemas that are used in updating that record will have to be modified to include the new index area.
A record will become connected to the index once a MAINTAIN INDEX utility is performed on the new index, or when a record occurrence is stored after the index is defined. Once that occurs, whenever a record occurrence is subsequently updated or erased, the program doing those updates will need to have the index area readied. If it hasn't been readied, the program will get a run-time abend indicating the necessary (index) area hasn't been readied: 0201 or 0801. The program must be recompiled with a new subschema containing the index area in order for it to be readied, so that this type of error can be avoided at run-time.
For databases of any size, putting an index in it's own area will often increase the run-time efficiency. However, it may require this additional step of recompiling the programs which update the record, with the updated subschema, as part of moving this new index into a production environment.
The programs you need to recompile are ones which ready areas explicitly (by name), regardless of what type DML commands they contain. If a program readies all areas (not by name), then it does not need to be recompiled.
The COBOL READY will either be READY area-name USAGE-MODE IS xxxxxxx; or it is just READY USAGE-MODE IS xxxxxxx. The latter readies all areas in the subschema, and in this case the program does NOT need to be recompiled. In the first case, the program will need to be modified to include a READY for the new index area, and will then need to be recompiled.
Again, the need to recompile is based on the type of READY that's issued, not the type of DML statements in the program.
Everything above applies equally to ADS dialogs that access a record to which a new index is added, except for the format of the READY statement..
Details on COBOL syntax can be found in the CA IDMS DML Reference - COBOL, which can be found here: