CPYF は非常に柔軟で幅広く約に立つコマンドである。
CPYF くらいは知っている、と思っている人でも CPYF でこんなこともできるという機能を下記に紹介する。
CPYF を使えば CRTDUPOBJ と同じように新しいファイルを複製することができる。
【例】
ライブラリー QTRFIL の商品マスター SHOHIN を QTEMP に作成する。
CPYF FROMFILE(QTRFIL/SHOHIN) TOFILE(QTEMP/SHOHIN) CRTFILE(*YES)
【例】
ライブラリー QTRFIL の商品マスター SHOHIN を QTEMP/SHOHIN に置換える。
CPYF FROMFILE(QTRFIL/SHOHIN) TOFILE(QTEMP/SHOHIN) MBROPT(*REPLACE)
【例】
ライブラリー QTRFIL の商品マスター SHOHIN を 印刷出力する。
CPYF FROMFILE(QTRFIL/SHOHIN) TOFILE(*PRINT)
【解説】
後に示すレコードの抽出と合わせて利用すれば特定の条件に叶うレコードを
一覧表にすることができる。
【例】
商品マスター QTRFIL/SHOHIN のダンプ・リストを出力する。
CPYF FROMFILE(QTRFIL/SHOHIN) TOFILE(*PRINT) OUTFMT(*HEX)
【例】
ライブラリー QTRFIL の商品マスター SHOHIN を *NOCHK で QTEMP/SHOHIN に上書きでコピーする。
CPYF FROMFILE(QTRFIL/SHOHIN) TOFILE(QTEMP/SHOHIN) MBROPT(*REPLACE) FMTOPT(*NOCHK)
【注意】
*NOCHK は異なるフィールドであることも無視してコピーするので、意図的に
理解してコピーする以外は知識のない方は危険であるので *NOCHK の指定は
避けたほうがよい。
【例】
商品マスター QTRFIL/SHOHIN をフィールド単位で QTEMP/SHOHIN へコピーする。
CPYF FROMFILE(QTRFIL/SHOHIN) TOFILE(QTEMP/SHOHIN) MBROPT(*REPLACE) FMTOPT(*MAP *DROP)
【解説】
レコード・レイアウトが異なる場合に一致するフィールド値のみをフィールド単位で
コピーするのが *MAP *DROP である。
データ・ベースのレコード・レイアウトを変更したときは古いデータ・ベースから
新しいデータ・ベースへ *MAP *DROP でコピーするとデータを正確に移すことができる。
【例】
商品マスター QTRFIL/SHOHIN の商品コード(SHCODE) の先頭1桁目が T であるレコードだけを抽出して QTEMP/SHOHIN へコピーする。
CPYF FROMFILE(QTRFIL/SHOHIN) TOFILE(QTEMP/SHOHIN)
MBROPT(*REPLACE) INCCHAR(SHCODE 1 *EQ T)
【例】
商品マスター QTRFIL/SHOHIN の単価(SHTANK) が 15万円より大きな商品だけを抽出してコピーする。
CPYF FROMFILE(QTRFIL/SHOHIN) TOFILE(QTEMP/SHOHIN)
MBROPT(*REPLACE) INCREL((*IF SHTANK *GT 150000))
【解説】
条件は最大50個まで指定することができる。
【例】
商品マスター QTRFIL/SHOHIN に存在していて QTEMP/SHOHIN に存在しない商品コード(キー)の
レコードだけを追加する。
CPYF FROMFILE(QTRFIL/SHOHIN) TOFILE(QTEMP/SHOHIN) MBROPT(*ADD)
【解説】
ファイルがキーつきのアクセス・パスを持つファイルであればキーで検査されて
新しいキーのレコードだけが追加される。
これはあたかもプログラムで検査して(CHAIN) レコードを追加するのと同じである。
【例】
商品マスター QTRFIL/SHOHIN に存在していて QTEMP/SHOHIN にも存在している同じキーのレコードは
更新して、なければ新しくレコードを追加する。
CPYF FROMFILE(QTRFIL/SHOHIN) TOFILE(QTEMP/SHOHIN) MBROPT(*UPDADD)
【解説】
この *UPDADD オプションは、あたかもプログラムで更新/追加を行うのと同じである。
同じキーのレコードがあれば更新して、無ければ新たにレコードを追加する。
このキー単位での追加/更新機能が実はここで紹介したかった CPYF の最も優れた機能である。
*UPDADD を使ってレコードの追加/更新を行えるという意味は、
CPYF の機能を実行することができる。特に 9 と 10 は CPYF を改めて見直しても良い機能である。
プログラムを書く前に、CPYF は使えないか ? と考えてみよう。