July 13, 2005 Hey, Ted
I increased the size of a character field in the DDS of a physical file and ran the Change Physical File (CHGPF) command to apply the change. I was surprised to find that the changed field remained unchanged in one of my logical files. Can you explain why?
Until recently, I was under the impression that CHGPF recreates all logical files, but I was wrong. CHGPF only changes the logical files that share the record format of the physical file. This is documented in the Database Programming manual. (See Record format relationships between physical and logical database files.) I can’t find anything in IBM‘s documentation that directly addresses logical files that do not share the record format of the physical file.
As an example, here’s the DDS for TESTDATA, a physical file that has a one-byte alpha field.
A UNIQUE A R TESTDATAR A KEY 3P 0 A FIELD01 1A A FIELD02 5P 2 A K KEY
Here’s a logical file that shares the record format.
A R TESTDATAR PFILE(TESTDATA) A K FIELD02
And a logical file that has its own record format.
A R TESTDATAR PFILE(TESTDATA) A KEY A FIELD01 A K KEY
If you create the three files and run Display Field Field Description (DSPFFD) against each of them, you’ll see that FIELD01 is defined as a one-byte field in all of them.
Now change the size of FIELD01 from one to five bytes.
A UNIQUE A R TESTDATAR A KEY 3P 0 A FIELD01 5A A FIELD02 5P 2 A K KEY
Change the physical file.
CHGPF FILE(TESTDATA) SRCFILE(MYLIB/MYSRC) SRCMBR(TESTDATA)
Rerun those DSPFFD commands and take a good look at the size of FIELD01. It’s five bytes long in the physical file and the first logical file, but only one byte in the second logical file. If you load a value larger than one byte into FIELD01 of the physical file, you will only see the first byte when reading the logical file.
I prefer to use logical files that have field lists, since the programs that use such files do not have to be recompiled when a new field is added to the physical. However, this example shows the downside. The moral of the story: be sure to examine all logical files when you change a physical file layout. You may have logical files that need to be recreated and programs that use them and need to be recompiled.