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
は使えないか ? と考えてみよう。