タイガー!タイガー!じれったいぞー!(SE編)

AS400, Java, JavaEE, JSF等の開発、習慣など。日々の気づきをまとめたブログ(備忘録)

【AS400】CPYFコマンド

AS400の数あるコマンドの中で、上位3本の指に入る好きなコマンドが「CPYFコマンド」です。CPYF、つまりファイルをコピーするコマンド。

テーブルなどのオブジェクトを別環境に複製することが容易にできるようになります!

よく使うコマンド例

丸ごとコピー

ライブラリAからライブラリBに同じオブジェクトを丸ごと複製する、何てことを多々行っています。

同一アプリの別環境(開発環境、本番環境)などの場合ですね。

CPYF FROMFILE(TIGERDB/TABLE_A) TOFILE(TIGERDB2/TABLE_A) MBROPT(*REPLACE)

MBROPTを*REPLACEで指定することで、既存のメンバーを消去し,新しいレコードを追加してくれます。

なお、もしコピー先にオブジェクトが存在していない場合には、CRTFILE(*YES) オプションを付ければOKです。

中身全件を追加したい

テーブルAの中身をテーブルBに追加したい場合に使います。MBROPT(*ADD)にします。

CPYF FROMFILE(TIGERDB/TABLE_B) TOFILE(TIGERDB/TABLE_C) MBROPT(*ADD)

上記の例では、TABLE_CにTABLE_Bのレコード全件が追加されます。

特定のレコードだけ追加したい

INCRELオプションを使い、条件式を加えることでその条件のレコードだけをコピーできます。

CPYF FROMFILE(TIGERDB/TABLE_D) TOFILE(TIGERDB2/TABLE_E) 
         MBROPT(*UPDADD) INCREL( (*IF ID *EQ '00001'))

なお、上記の例のMBROPT(*UPDADD)は、MBROPT(*ADD)とは異なり、コピー先にすでに同じキーが存在する場合は更新処理をし,存在しない場合には追加処理をしてくれます。

書式の違うテーブルに追加したい

CPYF FROMFILE(TIGERDB/TB1) TOFILE(TIGERDB/TB2) 
         MBROPT(*REPLACE) FMTOPT(*NOCHK)

レコード長は同じですが、型の違うファイルをコピーしたい場合です。

わかりにくいので、図を貼り付けます。FMTOPT(*NOCHK) にすることで実現可能です。

まとめ

このように、便利なコマンドなんですね、CPYFは!

他にもパラメータが多くありますが、まずは基本的な機能を思う存分活用していきたいところであります。