QUERY/400 は SQLをベースとするライセンス・プログラムである。
IBM iではQUERY/400が提供されているためSQLを知らなくても
QUERY/400で簡単にデータ・ベース検索ができる。
そのため IBM iのユーザーでは SQLを知らない人が多いのは
QUERY/400が普及していてあまりにも簡単にデータ・ベース検索が
できてしまうので SQLを必要としなくなったせいであろう。
しかしQUERY/400 も SQLベースであることが理解できれば
次のことも理解できる。
1. QUERY/400が導入されていないIBM i環境でも *QRYDFNプログラムの実行は可能である。
QUERY/400がSQLベースであるということは API : QSQROUTE によって
*QRYDFN (ユーザーが作成したQUERY適用業務プログラム)は動作していることになり
QSQROUTE はどのようなIBM i環境でも導入されている。
従って *QRYDFNは QUERY/400が導入されていない環境でも動作することができる。
(ただし作成はできない)
2. *QRYDFN から SQL文を抽出することができる。
*QRYDFNはSQLベースであるので RTVQMQRY コマンドによって *QRYDFNの内部に含まれている
SQL文を抽出することができる。
[例]
ライブラリーR610OBJの *QRYDFN:@BUHINM から*QMQRYソースを抽出して
ライブラリーR610SRCのソース・ファイル QQMQRYSRC に入れる
QUERY 管理機能プログラム検索 (RTVQMQRY)
選択項目を入力して,実行キーを押してください。
QUERY 管理機能プログラム . . . > @BUHINM 名前
ライブラリー . . . . . . . . . . . > R610OBJ 名前 , *LIBL, *CURLIB
ソース・ファイル . . . . . . . > QQMQRYSRC 名前
ライブラリー . . . . . . . . . . . > R610SRC 名前 , *LIBL, *CURLIB
ソース・メンバー . . . . . . . *QMQRY 名前 , *QMQRY
QRYDFN からの情報使用可能 . . > *YES *NO, *YES, *ONLY
抽出された *QMQRYSRCは次のとおり
0001.00 H QM4 05 Q 01 E V W E R 01 03 25/20/02 08:18 0002.00 V 1001 050 部品マスター一覧表 0003.00 V 5001 004 *HEX 0004.00 SELECT 0005.00 ALL BHNCOD, BHNAME, BHKBN, BHZKBN, BHBASE, BHTANI, BHTANT, BMKATA, 0006.00 BHMKCD, BHBAIK, BHTEHA, BHZUBN 0007.00 FROM QTRFIL/BUHINM T01
この *QMQRYSRCから *QMQRYオブジェクト( QUERY管理機能)を生成することができる
QUERY 管理機能プログラム作成 (CRTQMQRY)
選択項目を入力して,実行キーを押してください。
QUERY 管理機能プログラム . . . @BUHINM 名前
ライブラリー . . . . . . . . . . . R610OBJ 名前 , *CURLIB
ソース・ファイル . . . . . . . QQMQRYSRC 名前
ライブラリー . . . . . . . . . . . R610SRC 名前 , *LIBL, *CURLIB
ソース・メンバー . . . . . . . *QMQRY 名前 , *QMQRY
テキスト ' 記述 ' . . . . . . . *SRCMBRTXT
分類順序 . . . . . . . . . . . *SRC 名前 , *SRC, *JOBRUN, *JOB...
ライブラリー . . . . . . . . . . . *LIBL 名前 , *LIBL, *CURLIB
言語 ID . . . . . . . . . . . . *SRC *JOB, *JOBRUN...
[解説]
これは QMQRYSRCソースからのコンパイルでオブジェクト : @BUHINM *QMQRY を
作成している。
生成された *QMQRYオブジェクトは STRQMQRYコマンドによって実行することができる
QUERY 管理機能プログラム開始 (STRQMQRY)
選択項目を入力して,実行キーを押してください。
QUERY 管理機能プログラム . . . @BUHINM 名前
ライブラリー . . . . . . . . . . . R610OBJ 名前 , *LIBL, *CURLIB
出力 . . . . . . . . . . . . . * *, *PRINT, *OUTFILE
実行の結果は次のとおり
報告書の表示 QUERY. . . . .: R610OBJ/@BUHINM 幅 . . . .: 246 書式 . . . . .: *SYSDFT 桁 . . . .: 1 制御 . . . . . 行 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9....+....0....+....1....+....2... 部品番号 部品名 部品区分 在庫区分 基準在庫数 管理単位 担当者 コード メーカー 型番 ------------ -------------------- ---------- ---------- ------------ ---------- ------------ -------------------- 000001 AD-D15FF 超小型アダプター 1 1 1,000 KO 000002 BUH-001 金型パイプ 001 2 2 1,800 KG 2101 SANWA TEST 000003 BUH-002 5mmネジ 1 48,000 KG 000004 BUH-003 台座 500 X 250 1 25,000 KO 000005 BUH-004 六角平ネジ 60 MM 1 3,000 KO 000006 BUH-005 表示端末 2 200 KG 000007 DIS-001 磁気ディスク装置 1 0 KG 000008 DIS-002 フロッピー 8 インチ 1 0 KO 000009 DIS-003 ディスケット 5 インチ 1 0 KO 000010 EKI-054 液晶表示装置 2 0 KO 000011 MAN-087 マニュアル一式 2 0 KO MAN123 000012 MF333 コンピュター アクセサリー 2 100 KO 000013 TEN-033 テンプレート 001 1 12,500 KO SHARP 001 000014 TEN-034 台座200金 1 1,500 MM 000015 TEN-035 発光ダイオード 2 100,000 MM ****** * * * * * データの終わり * * * * *
…これで QUERY/400の実体はSQLであることを実感して頂けたと思う。
[追]
これが初めての人は *QRYDFN のソースが抽出できることに驚いたかも知れない。
QMQRYSRCを解析してカスタマイズすれば動的なQueryの実行を実現することができる。
QMQRYSRCのソースの最初の部分は*QMQRYの出力書式を表しているので
この部分を変更すれば印刷書式も変更することができる。
このことを利用してかつて QUERYプロンプトという名前のツールを作成したことがある。
このQUERYプロンプトは実行時にQUERYにパラメータを範囲指定できるというものであり
弊社の最初のツールとなった。
QUERYプロンプトも機会があればこのサイトのToolsで公開してみたい。