11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

IBM i (旧AS400)の自己学習メモ AS400保守・運用編01 WRKQRYでデータ調査/データ移行

Posted at

自己学習メモインデックス

IBM i (旧AS400)の自己学習メモ インデックス

概要

AS400のシステムを保守・運用していると、ほぼ毎日のように利用しているコマンドがあります。
WRKQRYはSQL文を書かずに調査対象となるファイル(テーブル名)や、結合条件(ON句)、抽出条件(WHERE句)などを指定してデータ抽出を行うことができる機能です。
また、抽出したデータを画面に表示するだけでなく、保存先としてデータベースにすることで、例えば○○ライブラリにあるファイルの一部を抽出し、そのデータを××ライブラリに保存するということもできます。
本番環境から開発・テスト環境へのデータコピーやデータ移行にも使えます。
(もちろん、同一区画内にそれぞれのライブラリが無いと実現できませんが。。。)

WRKQRYの使い方

新規Queryの作成

WRKQRYコマンド実行

すでに定義済みのQueryを編集したり実行したりすることもできますが、まずは新規にQueryを作成する手順を示します。
以下のコマンドを実行します。

wrkqry

すると、以下の画面が表示されます。

  • Option : 1(Create)を指定
    • 編集したい場合は2
    • それ以外はあんまり使ったことないっす
  • Query : ※新規作成する場合は空でOK(すでに作成済みのQuery定義を編集したりする場合にそのQuery名を指定します。)
  • Library : ※新規作成する場合はLibraryはなんでもOK(すでに作成済みのQuery定義を編集したりする場合は、そのQuery定義ファイルが保存されているライブラリを指定します。)
スクリーンショット 2020-05-10 18.00.50.png

Query定義画面が表示されます。
画面表示の時点で、いきなりSpecify file selectionsのOptに1がセットされた状態となっています。
何はともあれ対象となるファイルを指定しなさいよということのようです。
スクリーンショット 2020-05-10 18.04.59.png
ここからざっくり、どういった手順でデータ抽出(SELECT)するかというと

  1. Specify file selectionsで調査対象のファイルを指定 FROM句
  2. Select recordsで抽出条件を指定 WHERE句
  3. Select and sequence fieldsで抽出対象の項目(カラム)を指定 SELECT句
  4. Select sort fieldsでソート条件を指定 ORDER BY句
  5. F5キー押下で実行→結果確認

という流れで利用していきます。

Specify file selections 調査対象のファイルを指定 FROM句

Specify file selectionsのOptに1をセットしてEnterを押下
スクリーンショット 2020-05-10 18.19.58.png

基本的にはFileLibraryを指定してEnterを2回押下すると、Query定義画面に戻ります。
1回目のEnterでFormatの値がDDSファイルで定義されているレコード様式の名前に勝手に変換されます。

  • File : MTOKISKP
  • Library : YAMAGUCHI1
  • Member : *FIRST
  • Format : *FIRST

as400-1.gif

Select records 抽出条件を指定 WHERE句

Select recordsのOptに1をセットしてEnterを押下
スクリーンショット 2020-05-10 18.28.45.png

以下の条件を指定します。

  • Field : 条件となる項目(カラム)名を指定
  • Test : 画面上部に青文字でTests: EQ, NE, ...とヒントが出ている比較演算子を表すキーワードを指定する
  • Value : 比較演算子の右辺 なんらかの値または比較対象のカラム名を指定
  • AND/OR : 何も指定しない場合デフォルトでANDとなる。OR条件にしたい場合はORと指定
Testキーワード 対応するSQLの比較演算子 利用例
EQ = TOKCD EQ '00001'
NE <> TOKCD NE '00001'
GT > TOKRMT GT 100
LT < TOKRMT LT 9000000
GE >= TOKRMT GE 100
LE <= TOKRMT LE 9000000
RANGE between TOKRMT RANGE 1000000 9000000
IS is null TOKKANA IS NULL
ISNOT is not null TOKKANA ISNOT NULL
LIST in TOKCD LIST '00001' '00002'
NLIST not in TOKCD NLIST '00001' '00002'
LIKE like TOKNM LIKE '%商店%'
NLIKE not like TOKNM NLIKE '%商店%'

as400-1.gif

Select and sequence fields 抽出対象の項目を指定 SELECT句

Select and sequence fieldsのOptに1を指定してEnter
スクリーンショット 2020-05-10 18.54.01.png

Seqの項目に抽出したい項目の順番を0〜9999で指定することで、フィールドがその順番で並びます。
全項目をそのまま取得したい場合はF21キーを押下して全選択してもいいですし、何もSeqを指定しない場合、デフォルトでは全選択と同じ意味となります。

as400-1.gif

Select sort fields ソート条件を指定 ORDER BY句

Select sort fieldsのOptに1を指定してEnter

スクリーンショット 2020-05-10 19.04.00.png
  • Sort Prty : ソート条件に指定する項目に対してその優先順位を0-999で指定
  • A/D : A=Ascending(昇順) D=Descending(降順)を指定 何も指定しない(デフォルト)は昇順

as400-1.gif

F5キーを押下して実行

上記までの設定を行えば準備はOKです。
F5キーを押下すると各設定に応じた結果が画面に表示されます。
表示された画面は 24x80の画面なので、横スクロールしたい場合はF19=Left F20=Rightのキーを利用してスクロールしてデータを確認してください。

as400-1.gif

ここまでが、標準的なWRKQRYでのデータ調査方法です。
途中指定しているORDER BY句の指定や、WHERE句の指定、SELECT句の指定などは、どの順番でおこなっても構いませんし、不要であれば指定しなくてもOKです。

取得結果の集計(SUM)

数値項目を合計したい場合があります。SQLではSUMやCOUNTなどの集計関数と、MINやMAXなどの集約関数が存在します。
WRKQRYではそれらと同等の機能を実現することが可能です。
それの実現方法を紹介します。

手順の概要は以下の通りです。
もちろん、事前にSpecify file selectionsで調査対象のファイルを選択した状態である必要があります。

  1. Select report summary functions 集計項目と集計関数/集約関数の条件を設定 SUM/COUNT/MIN/MAX...etc
  2. Define report breaks 集計項目の集計単位条件を設定 GROUP BY句
  3. Select output type and output form 明細行/集計行の表示切り替え設定

Select report summary functions 集計項目と集計関数/集約関数の条件を設定 SUM/COUNT/MIN/MAX...etc

Select report summary functionsのOptに1を指定してEnter
スクリーンショット 2020-05-11 7.23.25.png

Optionsの項目 1列目〜5列目に、順番に画面上部に表示されているType Optionsの任意の値を必要な項目に設定します。

  • 1=Total : SUM
  • 2=Average : AVG
  • 3=Minimum : MIN
  • 4=Maximum : MAX
  • 5=Count : COUNT

as400-1.gif

Define report breaks 集計項目の集計単位条件を設定 GROUP BY句

Define report breaksのOptに1を指定してEnter
スクリーンショット 2020-05-11 7.27.24.png

集計項目の集計単位をBreak Levelに設定します。
その他の設定はデフォルトのままEnterを押下してQuery定義画面に戻ります。

as400-1.gif

Select output type and output form 明細行/集計行の表示切り替え設定

Select output type and output formのOptに1を指定してEnter
スクリーンショット 2020-05-11 7.31.29.png

Form of outputの設定によって集計結果の出力が、明細行を含んで出力してくれるか、合計行のみ出力するかを設定できます。

1:明細行を含む
スクリーンショット 2020-05-11 7.33.29.png

2:合計行のみ
スクリーンショット 2020-05-11 7.33.51.png

取得結果をデータベースファイルへ保存

  1. Select output type and output form 保存先をデータベースファイルに設定
  2. F3キーを押下してQueryを実行して終了

Select output type and output form 保存先をデータベースファイルに設定

Select output type and output formのOptに1を指定してEnter
Output type3(Database file)を指定してEnter
スクリーンショット 2020-05-11 7.42.19.png

  • File : Queryで取得した結果を保存したいファイル
  • Library : 保存先のライブラリ
  • Data in file : 2(Replace file)

※Replace fileにしているのは、取得結果を保存先に置き換えるためです。
データを単純に保存先のファイルに追加したい場合などは、それに応じた指定をしてください。

スクリーンショット 2020-05-11 7.42.37.png

F3キーを押下してQueryを実行して終了

  • Save definition : N(Query定義を保存しない)
  • Run option : 1(Run interactively 終了時にQueryを実行して終了してくれる)

(Save definitionをYにすると、作ったQuery定義を名前を付けて指定したライブラリに保存することができます。)

スクリーンショット 2020-05-11 7.45.19.png

以下の画面イメージのように、指定したファイルを置き換えたよ。というメッセージが表示されます。
この例ではYAMAGUCHI1/QQRYOUTファイルに実行結果が保存されています。

スクリーンショット 2020-05-11 7.47.38.png

WRKQRYには副問合せのような機能が無いので、副問合せを使った複雑なQRYを実現したい場合は、
一度ファイルに実行結果を保存しておき、その結果をさらにWRKQRYの対象ファイルとして指定することで実現することが可能です。
(まぁ、私の場合はSQLを直接書いた方が圧倒的に早いし、より複雑なものも作れるので便利なのですが、
 5250の画面しか使えない場面があった時のためにこういった機能も使えるように練習中です。)

11
9
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?