i am BESTでSQLの書き方を連載(?)しており、興味を持って呼んでいる方も多いのではないでしょうか。
とはいえ、OPM-RPG/COBOLなどによる開発やメンテナンスが主で、SQLを動かしたことが無い方も多いと思います。
i/OSでは用途や状況に応じて様々な方法でSQLを実行することができます。ユーザー・インターフェースも5250画面は当然とし、Windows(主としてODBC)、WebアプリケーションやiNaviなどのツール(主としてJDBC)などなど不足を感じることはないでしょう。
こちらではi/OSにおけるSQLの「動かし方」をいくつかご紹介します。
.
サンプルとして使用するデータベース(テーブル)はおなじみ(?)のTOKMSPです。定義は下図のようになっています。これはSQL文(CREATE TABLE)によって作成されたものではありませんし、ジャーナルもかかっていませんがSQLによる参照のみであれば問題ありません。
DSPFMT レ コ ー ド 設 計 書 ************************** 物理ファイル名 TESTLIB/TOKMSP レコード様式名 TOKMSR 記述 得意先マスター・レコード 項目名 桁数 属性 BYTE 開始 終了 入出力属性 欄見出し/テキスト'記述' ---------- -------- ---- ---- ----- ----- ---------- ----------------------------- TKBANG 5 A 5 1 5 入出力 得意先 番号 TKNAKN 20 A 20 6 25 入出力 得意先 仮名 TKNAKJ 20 O 20 26 45 入出力 得意先 漢字 TKADR1 20 O 20 46 65 入出力 住所1 TKADR2 20 O 20 66 85 入出力 住所2 TKTIKU 2 A 2 86 87 入出力 地区 コード TKPOST 6 A 6 88 93 入出力 郵便番号 TKTELE 13 A 13 94 106 入出力 電話番号 TKGURI 9 0 P 5 107 111 入出力 当月 売上高 TKNURI 9 0 P 5 112 116 入出力 当年 売上高 TKZURI 9 0 P 5 117 121 入出力 前年 売上高 TKUZAN 9 0 P 5 122 126 入出力 売掛金 残高 TKGEND 9 0 P 5 127 131 入出力 信用 限度額 TKNYUK 6 0 P 4 132 135 入出力 最終 入金日 TKSIME 1 A 1 136 136 入出力 締め日 コード __________ ________ ____ ____ _____ _____ __________ _____________________________ レコード長 136
ではこのテーブルをSQLから読み込んでみましょう。
1. 5250画面から実行
もっともお手軽な方法です。なお、PCOMMのコードページは939または1399、ジョブのCCSIDは5035または1399とします。TOKMSPのデータもこれらのCCSIDで記録されているとします。
1-1. 57xx-ST1(SQL開発キット)
ライセンス・プログラム、57xx-ST1(DB2 QUERY MGR AND SQL DEVKIT)がインストールされていれば、STRSQLコマンドで「SQL ステートメントの入力」画面が表示され、任意のSQLステートメントを実行することができます。
例えばTOKMSPから得意先番号(フィールド名「tkbang」)が「02010」のデータを検索するには次のように入力し、実行キーを押します。
> select * from testlib/tokmsp where tkbang = '02010'
するとRUNQRYのような画面が表示されます。
データの表示
行の位置指定 . . . . . . .
....+....1....+....2....+....3....+....4....+....5....+....6....+....7.
得意先 得意先 得意先 住所1
番号 仮名 漢字
02010 アイカワ センタ- 相川センター 東京都江東区
******** データの終わり ********対象のレコードが選択されていることがわかります。実行キーで前の画面に戻ります。
1-2. qshell
qshell(i/OSのオプション30)からdb2コマンドを使用してSQLを実行することができます。5250コマンドラインから、qshコマンドを実行し、「QSH コマンド入力」画面を出します。
前の例と同じSQLを実行するには次のように入力し、実行キーを押します。
> db2 "select * from testlib.tokmsp where tkbang='02010'"
ライブラリーとデータベースの区切り文字(.)など微妙に異なりますね。結果は画面がスクロールして表示されます。
TKBANG TKNAKN TKNAKJ TKADR1 TKADR2
TKTIKU TKPOST TKTELE TKGURI TKNURI TKZURI
TKUZAN TKGEND TKNYUK TKSIME
------- -------------------- -------------------- -------------------- ------
-------------- ------- ------- ------------- ----------- ----------- --------
--- ----------- ----------- -------- -------
02010 アイカワ センタ- 相川センター 東京都江東区 新木
場1?4 23 136 03-512-9478 705200 4029900 618
3600 2000000 2000000 880501 11 RECORD(S) SELECTED.
===>
2. Windowsから実行
2-1. iNavi
Access for WindowsがPCにインストールされていることが前提です。スタート → プログラム(P) → IBM System i Access for Windows → System i ナビゲーター でiNaviを起動します。
下図のように、①で対象のSystem i を選択、②でデータベースを選択、③でSQLスクリプトを起動します。
「SQLスクリプトの実行」画面が表示されたら、④でSQL文を入力し、⑤をクリックして「全てを実行」すると、⑥に結果が表形式で表示されます。
このスクリプトは保管しておいて後から再実行することもできます。便利ですね。
2-2. MS-Query
Microsoft Excelなどの製品にはMicrosoft Query(以下MS-Query)が付属します。MS-Queryの詳細はマイクロソフトのサイトをご覧ください。
通常MS-QueryはExcelなどから呼び出されますが、直接起動することも可能です。パスはインストールした環境やOfficeのバージョンにより異なりますが、例えば手元の環境では、スタート → ファイル名を指定して実行(R...) で「名前(O):」に「"D:\Program Files\Microsoft Office\Office10\MSQRY32.EXE"」(パスに空白があるのでダブル・クオーテーションで囲むこと)と入力し、OKをクリックすると起動します。
メニュー・バーから ファイル(F) → SQLの実行(E)... を選択します。
「SQLの実行」ウインドゥが開くので、データソース(T)...をクリックします。
「<新規データソース>」が選択されていることを確認し、OKをクリックします。
1に適当な名前(この例では「iOS」)を入力し、2に「iSeries Access ODBC Driver」(Access for Windowsのバージョンによって名前が異なる)を選択して3の接続をクリックします。
いろいろとオプションがありますが、とりあえずそのままOKをクリックします。
OKをクリックするとデータソースの選択画面に戻ります。
新しいデータソースが選択されているのを確認し、OKをクリックします。
「SQLの実行」ウインドゥに戻るので、SQL文を入力して実行(X)をクリックします。
MS-Queryに結果が戻されます。
.
いろいろな方法で簡単にSQLが実行できることがお分かりいただけたと思います。SQLを使用したプログラムもご紹介したいと思いますが、そちらはいずれまた...
ここに書かれている内容は私の所属する会社、組織とは関係ありません。 内容を誰かが保証する物ではありません。