更新QUERY
更新QUERYとは
更新QUERYとはQUERY適用業務の機能を拡張してデータ・ベースを更新するアプリケーションを
作成する機能のことです。
例えばQUERYでは結果のフィールドを定義することができますが
このとき結果のフィールドを算出するための式を定義することができます。
結果のフィールドは既存のデータ・ベースのフィーヘルドを指定することは
できませんが文字「@」を先頭に付加したフィールド名としておけば
結果のフィールドとして式を定義することができます。
更新QUERYはこの結果のフィールドと式をQUERYオブジェクトから読み取って
文字「@」を除去した既存のフィールドとして更新するためのSQL文を
生成してデータ・ベースを更新します。
[例] 金額 = 数量 X 単価 を計算する
結果のフィールドの定義 フィールド名または固定情報と演算子を使用して定義を入力し,実行キーを押してください。 演算子: +, -, *, /, SUBSTR, ||, DATE... フィールド 式 カラム見出し LEN DEC @KING SURYO * TANKA 売上金額
【解説】
KING はこのデータ・ベースのフィールド名であり KING = SURYO x TANKAI(=数量 x 単価)という式で
算出されますがデータ・ベースにある既存のフィールド名は結果のフィールド名として
定義することはできませんので文字「@」を先頭に付加した @KING として定義します。
更新QUERYはこの結果のフィールド@KINGと計算式を読み取って
UPDATE QTRFIL/JUCHU SET KING = SURYO * TANKA
のようなSQL文を生成して RUNSQLによってデータ・ベースを更新します。
SQLによってデータ・ベースを更新しますがIBMライセンス 対話式SQLの導入の必要はありません。
それでは以下のメニューに従って操作を開始してください。
11.QUERY適用業務の作成(WRKQRY)
最初に更新QUERYの元にするベースのQUERY適用業務を作成して
結果のフィールドを定義します。
[QUERY適用業務の作成(WRKQRY)]
QUERY 処理 選択項目を入力して,実行キーを押してください。 オプション . . . . 1 1= 作成, 2= 変更, 3= コピー, 4= 削除 5= 表示, 6= 定義の印刷 8= バッチで実行, 9= 実行 QUERY 定義 . . . . @URIAGE 名前,リストは F4キー ライブラリー . . QTROBJ 名前, *LIBL, リストは F4キー
【解説】
ここではサンプル・ライブラリーQTRFILの売上ファイル(URIAGE)の更新を例にして解説します。
QUERYに@URIAGEという名前のQUERYの作成を指示します。
[ファイル選択指定]
ファイル選択指定 選択項目を入力して,実行キーを押してください。追加のファイル選択項目を 指定するためには, F9 キーを押してください。 ファイル . . . . . . URIAGE 名前,リストは F4キー ライブラリー . . . QTRFIL 名前, *LIBL, リストは F4キー メンバー . . . . . . *FIRST 名前, *FIRST, リストは F4キー 様式 . . . . . . . . URIAGER 名前, *FIRST, リストは F4キー
【解説】
被更新ファイルとして QTRFIL/URIAGE を指定します。
[結果のフィールドの定義]
結果のフィールドの定義 フィールド名または固定情報と演算子を使用して定義を入力し,実行キーを 押してください。 演算子: +, -, *, /, SUBSTR, ||, DATE... フィールド 式 カラム見出し LEN DEC @URKING URSUR * URTANK *売上金額
【解説】
結果のフィールドの定義として被更新フィールド名として @URKING という名前を指定します。
実際の被更新フィールド名はこの売上ファイル無いに存在する URKING (=売上金額)という
フィールドですが既存のフィールドは定義できないので文字「@」(=必ず@を指定してください。)
を先頭に付加して @URKING として定義します。
[レコードの選択]
レコードの選択 比較条件を入力し実行キー。新しいグループを始めるには OR を指定してください。 テスト: EQ, NE, LE, GE, LT, GT, RANGE, LIST, LIKE, IS, ISNOT... AND/OR フィールド mヌn 値 (ホァーモn゙, 数値,'文字',または ...) URDATE GE 0 AND URDATE LE 999999
【解説】
次にレコードの選択も必ず定義してください。
定義が入力できればF5キーを押して計算結果を表示することができます。
[F5キーでの結果の表示]
報告書の表示
報告書の幅 . . . . . : 151
行の位置指定 . . . . . . . 桁移動 . . . . . . . . . .
行 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9....+...10....+...11....+...12....
* 売上金額 売上 NO 行№ 得意先 コード 売上日 売掛日 商品 コード 売上数 単価 売上金額 合計金
000001 495,000 1 1 0001 94/11/14 94/11/14 NV-BS30S 3 165,000 495,000 688,40
000002 139,600 1 2 0001 94/11/14 94/11/14 SC-CH150 2 69,800 139,600 688,40
000003 53,800 1 3 0001 94/11/14 94/11/14 RX-DT75 1 53,800 53,800 688,40
000004 180,000 2 1 0001 95/09/30 95/09/30 NV-CF1 1 180,000 180,000 880,00
000005 700,000 2 2 0001 95/09/30 95/09/30 NV-W1 2 350,000 700,000 880,00
【解説】
左端に表示されている項目が結果のフィールドの計算結果です。
F3キーを押してこれでQUERYを保管終了してください。
[QUERY 終了]
QUERY 終了 選択項目を入力して,実行キーを押してください。 定義の保管 . . . . . Y Y=YES, N=NO 実行オプション . . . 3 1= 対話式で実行 2= バッチで実行 3= 実行しない 定義を保管する場合: QUERY 定義 . . . . @URIAGE 名前 ライブラリー . . QTROBJ 名前,リストは F4 キー テキスト . . . . . 売上金額の計算 権限 . . . . . . . *LIBCRTAUT *LIBCRTAUT, 権限リスト名 *CHANGE, *ALL, *EXCLUDE, *USE
【解説】
QUERYはオプション=Yで保管しますが実行は N で終了してください。
これで更新QUERYの生成元となるQUERY適用業務を作ることができました。
12. 更新 QUERY の実行(UPDQRY)
11.で作成したQUERY適用業務を使って更新 QUERYを実行します。
[更新 QUERY 実行(UPDQRY)]
更新 QUERY 実行 (UPDQRY) 選択項目を入力して,実行キーを押してください。 QUERY . . . . . . . . . . . . . @URIAGE 名前 , *NONE ライブラリー . . . . . . . . QTROBJ 名前 , *LIBL, *CURLIB QUERY ファイル : ファイル . . . . . . . . . . *SAME 名前 , *SAME ライブラリー . . . . . . . *LIBL 名前 , *RUNOPT, *LIBL... メンバー . . . . . . . . . . *FIRST 名前 , *RUNOPT, *FIRST... 値の続きは+ 報告出力のタイプ . . . . . . . *RUNOPT *RUNOPT, *DISPLAY... 出力書式 . . . . . . . . . . . *RUNOPT *RUNOPT, *DETAIL, *SUMMARY レコード選択 . . . . . . . . . *YES *NO, *YES 更新前データの BACKUP . . . . . *YES *NO, *YES BACKUP ファイル . . . . . . . . *AUTO 名前 , *AUTO ライブラリー . . . . . . . . QRPLOBJ 名前 , *LIBL, *CURLIB
【解説】
IBM コマンド RUNQRY ではなく拡張QUERYのUPDQRYコマンドで実行します。
レコード選択が初期値は *YES になっていることに注意してください。
[更新前データのBACKUP]
更新前データの BACKUP=*YES で実行すると更新の直前には
被更新データ・ベースは自動的にライブラリー: QRPLOBJ にBACKUPされます。
ライブラリー: QRPLOBJとは IBM iのゴミ箱のようなライブラリーでコンパイルで上書きされた
オブジェクトがBACKUPされているライブラリーです。
更新QUERYもシステムと同じようにQRPLOBJにBACKUPします。
[ライブラリー: QRPLOBJ]
OPT オブジェクト タイプ 属性 テキスト QACXWA4YB9 *FILE PF-DTA *UPDQRY BACKUP-QRPLOBJ/QACXWA4YB9
BACKUPファイル名を *AUTO のままにしておくと更新QUERYによって自動的にBACKUPファイル名が
ランダムにめいめいされて保管されます。
従って複数回の更新が行われるとその回数分だけのデータがBACKUPされます。
ライブラリー QRPLOBJ はシステムのIPL時にCLRLIBによってクリヤーされますので
次のIPLまではBACKUPファイルは残っています。
年間を通じてIPLは行わないユーザーは定期的にQRPLOBJを見直す必要があります。
[コマンド・プロンプト表示]
売上金額の計算 (@URIAGE) 選択項目を入力して,実行キーを押してください。 出力 . . . . . . . . . . . . . *PRINT *PRINT, *, *OUTFILE ジョブ待ち行列へ投入しますか N Y=YES, N=NO ジョブ待ち行列 . . . . . . . QBATCH 名前 , *JOBD ライブラリー . . . . . . . QGPL 名前 , *LIBL, *CURLIB
【解説】
このまま実行キーを押すと更新が実行されます。