Q: Can I use the Copy File (CPYF) or Open Query File (OPNQRYF) command to update the value of a field when copying data into a file? I want to add records from multiple files into one history file. The history file has the same format as the other files except that it has one additional field to contain a value that describes where the data came from. The only other way I can think of is to write a generic program and fill the field based on a data structure and recompile it each time I change the file.
? Andrew Beasley
A: You can use the OPNQRYF command for this. Just specify the name of your input file in the FILE parameter and put the name of your output file in the FORMAT parameter. Then use the MAPFLD parameter to define a constant (or a variable in CL) for the extra field you want to update. Finally, use the Copy From Query File (CPYFRMQRYF) command to copy the records. A CL program to execute these commands would look like this:
PGM PARM(&FILE &ORIGIN) DCL VAR(&FILE) TYPE(*CHAR) LEN(10) DCL VAR(&ORIGIN) TYPE(*CHAR) LEN(10) OVRDBF FILE(&FILE) SHARE(*YES) OPNQRYF FILE((&FILE)) + FORMAT(HISTFILE) + MAPFLD((NEWFLD ('''' + *CAT &ORIGIN *CAT ''''))) CPYFRMQRYF FROMOPNID(&FILE) + TOFILE(HISTFILE) MBROPT(*ADD) CLOF OPNID(&FILE) DLTOVR FILE(&FILE) ENDPGM
You would execute this program for each file to be added to the history file specifying a different file name and origin for each.
? Jim Schecklman