データベース

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