The DFT Keyword is used to specify the default value of a field in the Physical File. The format of the keyword is:
DFT('value' | numeric-value | X'hexadecimal-value' | *NULL)
Without this keyword, character and hexadecimal fields are set to blanks as default and numeric fields are set to zeros as default.
However, if you specify the ALWNULL keyword for the field, then the character, hexadecimal, and numeric fields are set to the null value as default.
This keyword does not affect the physical file on input operations.
Example
The following example shows how to specify the DFT keyword.
If you want to copy/paste the DDS source code grab this:
** SAMPLE DDS FOR PHSYICAL FILE WITH VARIOUS FIELD TYPES
R RECORD1
CHARFLD1 20A DFT('SAMPLE FIELD')
CHARFLD2 5A DFT(X'D985955185')
HEXFLD1 3H DFT('ABC')
HEXFLD2 3H DFT(X'C1C2C3')
NUMFLD1 5S 0 DFT(99999)
NUMFLD2 5S 2 DFT(999.99)
NUMFLD3 5S 2 DFT(999)
NUMFLD4 5S 2 DFT(*NULL) ALWNULL
NUMFLD5 5S 2 DFT(999.99) ALWNULL
DATFLD1 L DATFMT(*MDY)
DATSEP('-')
DFT('12-31-91')
TIMFLD1 T DFT('11.15.00')
TIMESTAMP Z
- For the date (L) data type, the format specified on the DATFMT keyword dictates the length of the field. If you do not specify the DATFMT keyword, then the format is set to *ISO as default, which has a field length of 10. If you specify DATFMT(*JOB), the field length will always be 10, even if the Job Date Format Definition Attribute displays an 8 character date.
- For the time (T) data type, the format specified on the TIMFMT keyword dictates the length of the field. All formats for the TIMFMT keyword, including the default of *ISO, have field lengths of 8.
- For the timestamp (Z) data type, the field length is 26. The format of a timestamp field is
yyyy-mm-dd-hh.mm.ss.mmmmmm
Where yyyy = year, mm = month, dd = day, hh = hour, mm = minute, ss = second, and mmmmmm = microsecond.
What about those DEFAULT Values?
- The default value for CHARFLD1 is ‘Sample field’.
- The default value for CHARFLD2 is hex D985955185.
- The default value for HEXFLD1 is C1C2C3 (the hexadecimal representation of the character constant).
- The default value for HEXFLD2 is C1C2C3.
- The default value for NUMFLD1 is 99999 (no decimal character is required because the field has zero decimal positions).
- The default value for NUMFLD2 is 999.99.
- The default value for NUMFLD3 is 999 (no decimal character is required if you do not need to specify decimal values).
- The default value for NUMFLD4 is the null value (ALWNULL is a required keyword for the field if DFT(*NULL) is specified).
- The default value for NUMFLD5 is 999.99; the field also allows the null value.
- The default value for DATFLD1 is 12-31-91.
- The default value for TIMFLD1 is 11.15.00 (*ISO format).
You big silly.
Isn’t it obvious?
Now you feel silly for googling that right?
No, because it doesn’t work out of the box in an RPGLE program. Never has without special coding. (Unless I’m missing something and that’s always a possibility.)
How do I set a date time ‘Z’ field automatically get current date & time ?
You cannot use a DFT or INZ value to populate a field in DDS… so we normally just handle the population of the values in the program that is WRITING the data to the file.
For example in RPGLE:
date_field = %date();
time_field=%time();
timestamp_field=%timestamp();
Or if you are using SQL just use the DEFAULT option… in fact I will record a quick video showing you how and update this blog 😉