データベース

24. CPYF は優れたユーティリティー !

CPYF は非常に柔軟で幅広く約に立つコマンドである。
CPYF くらいは知っている、と思っている人でも CPYF でこんなこともできるという機能を下記に紹介する。

1 : CPYF でファイルを作成する

CPYF を使えば CRTDUPOBJ と同じように新しいファイルを複製することができる。

【例】

ライブラリー QTRFIL の商品マスター SHOHINQTEMP に作成する。

   CPYF FROMFILE(QTRFIL/SHOHIN) TOFILE(QTEMP/SHOHIN) CRTFILE(*YES)
2 : 既存のファイルにコピーするときは 「レコードの置き換えまたは追加 (*MBROPT)」に
*ADD (追加) または *REPLACE (置換え)の指定が必要である。

【例】

ライブラリー QTRFIL の商品マスター SHOHINQTEMP/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*NOCHKQTEMP/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 の機能を実行することができる。

特に 910CPYF を改めて見直しても良い機能である。
プログラムを書く前に、CPYF は使えないか ? と考えてみよう。