Effects of changing fields in a file description
The system uses the information in the record format description to determine the level identifier. Changes to the fields in a file description cause the level identifier to change. Changes in key fields or select/omit fields might cause unexpected results in programs using the new access path.
When a program that uses externally described data is compiled, the compiler copies the file descriptions of the files into the compiled program. When you run the program, the system can verify that the record formats the program was compiled with are the same as the record formats currently defined for the file. The default is to do level checking. The system assigns a unique level identifier for each record format when the file it is associated with is created. The system uses the information in the record format description to determine the level identifier. This information includes the total length of the record format, the record format name, the number and order of fields defined, the data type, the size of the fields, the field names, the number of decimal positions in the field, and whether the field allows the null value. Changes to this information in a record format cause the level identifier to change. The following DDS information has no effect on the level identifier and, therefore, can be changed without recompiling the program that uses the file:
- TEXT keyword
- COLHDG keyword
- CHECK keyword
- EDTCDE keyword
- EDTWRD keyword
- REF keyword
- REFFLD keyword
- CMP, RANGE, and VALUES keywords
- TRNTBL keyword
- REFSHIFT keyword
- DFT keyword
- CCSID keyword
- Join specifications and join keywords
- Key fields
- Access path keywords
- Select/omit fields
Keep in mind that even though changing key fields or select/omit fields does not cause a level check, the change might cause unexpected results in programs using the new access path. For example, changing the key field from the customer number to the customer name changes the order in which the records are retrieved, and might cause unexpected problems in the programs processing the file.
If level checking is specified (or defaulted to), the level identifier of the file to be used is compared to the level identifier of the file in your program when the file is opened. If the identifiers differ, a message is sent to the program to identify the changed condition and the changes might affect your program. You can compile your program again so that the changes are included.
An alternative is to display the file description to determine if the changes affect your program. You can use the Display File Field Description (DSPFFD) command to display the description or, if you have source entry utility (SEU), you can display the source file containing the DDS for the file.
The format level identifier defined in the file can be displayed by the Display File Description (DSPFD) command. When you are displaying the level identifier, remember that the record format identifier is compared, rather than the file identifier.
Not every change in a file necessarily affects your program. For example, if you add a field to the end of a file and your program does not use the new field, you do not have to recompile your program. If the changes do not affect your program, you can use the Change Physical File (CHGPF) or the Change Logical File (CHGLF) command with LVLCHK(*NO) specified to turn off level checking for the file, or you can enter an Override with Database File (OVRDBF) command with LVLCHK(*NO) specified so that you can run your program without level checking.
Keep in mind that level checking is the preferred method of operating. The use of LVLCHK(*YES) is a good database integrity practice. The results produced by LVLCHK(*NO) cannot always be predicted.
Parent topic:
Changing database file descriptions and attributes
Related reference
Display File Field Description (DSPFFD) command
Display File Description (DSPFD) command
Change Physical File (CHGPF) command
Change Logical File (CHGLF) command
Override with Database File (OVRDBF) command