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