Use this file-level keyword in a join logical file so the system provides default values for fields when a join to a secondary file does not produce any records. JDFTVAL is valid only for join logical files.
This keyword has no parameters.
The default values for the system are blanks for character and hexadecimal fields and zeros for numeric fields. You can change the default for specific fields by specifying the DFT keyword for the fields in the physical file.
If you specify JDFTVAL, your program retrieves records for which a secondary file does not have a corresponding record. If you do not specify JDFTVAL, a record in the primary file for which there is no corresponding record in a secondary file is skipped.
If you are joining three or more files, and you specify the JDFTVAL keyword for fields used as join fields, default values of fields missing in secondary files are used in the same way that a field value is used. For example, records are selected and omitted based on the default value. Also, if this field is used as a join field to join to other secondary files, records from the other secondary files are returned to your program based on the default value.
The following example shows how to specify the JDFTVAL keyword.
|...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8 00010A JDFTVAL 00020A R RECORD1 JFILE(PF1 PF2) 00030A J JOIN(PF1 PF2) 00040A JFLD(NAME NAME) 00050A NAME JREF(1) 00060A ADDR 00070A BAL A
PF1 is the primary file and PF2 is a secondary file. Assume that PF1 and PF2 have the following records:
PF1 NAME | ADDR | PF2 NAME | BAL |
---|---|---|---|
Anne | 120 1st St. | Anne | 5.00 |
Doug | 40 Pillsbury | Doug | 6.50 |
Mark | 2 Lakeside Dr. | Sue | 2.00 |
Sue | 120 Broadway |
With JDFTVAL specified in the join logical file, the program reads the following records (shown in arrival sequence):
NAME | ADDR | BAL |
---|---|---|
Anne | 120 1st St. | 5.00 |
Doug | 40 Pillsbury | 6.50 |
Mark | 2 Lakeside Dr. | 0.00 |
Sue | 120 Broadway | 2.00 |
Without JDFTVAL specified in the join logical file, the program can read only three records (no record is found for Mark).
In this example, if you specified JREF(2) instead of JREF(1), the records returned to the program might be different, as follows:
NAME | ADDR | BAL |
---|---|---|
Anne | 120 1st St. | 5.00 |
Doug | 40 Pillsbury | 6.50 |
2 Lakeside Dr. | 0.00 | |
Sue | 120 Broadway | 2.00 |