2017.07.14
Ted Holt 著

関数以外のことができる SQL 表関数

我々 IBM i 開発者は Scott Forstie に大きな借りがあります。彼は、多くのオペレーティング・システム関数に SQL インターフェースを提供してくれる、素晴らしい DB2 for i Services と IBM i Services を担当しています。IBM 同様、我々は SQL インターフェースを作成して、データベース以外の作業をすることができます。最近、私は丁度その作業をしました。

私は、Start SQL Interactive Session (STRSQL) コマンドを絶対に使用しないとは言い切れませんが、GUI SQL クライアント、特に IBM i Access Client Solutions (ACS) の一部である Run SQL Scripts ユーティリティーを使いたいと言うことはできます。しかし、グリーンスクリーン・セッションで簡単にできることが GUI プログラムではなかなかできないと苛立ちを感じます。

最近、Run SQL Scripts からライブラリー・リストを眺める簡単な方法がなかった (見つけられなかった) ので、さらに苛立ちが増しました。View メニューの Job Details オプションを使ってジョブ情報を確認できますが、Navigator for i を操作することになります。Squirrel などの IBM 以外のクライアントでは、ライブラリー・リストを表示することはできません。

このストーリーにはここからダウンロードできるコードが入っています。 何かを照会して、ライブラリー・リストを表であるかのように確認するのが良いことを思いつきました。IBM が提供してくれているサービスを思いつき、何か似たようなものを作成して目的を達成できるのではとわかりました。その何か似たようなものとは DspLibl ユーザー定義表関数でした。

私は QWCRTVCA API を使ってライブラリー・リストを取得しました。

技術情報code01

この API は、ライブラリー・リスト情報が入ったデータ構造を読み込みます。

技術情報code02

では、ユーザー定義表関数がどのように機能するかを見てみましょう。最初にシステムが呼び出しをします。それは一回限りのジョブの開始処理です。この場合、ライブラリー・リストを取得します。

次に、システムは引き続きデータの行を呼び出します。行を返すことで、プログラムは繰り返しこの呼び出しに応答します。返すデータがなくなったら、SQL 状態が 02000 に設定され、データの終了を送信します。それらの呼び出しごとに、私は、ライブラリー・リストの次のライブラリーの名前とタイプ、さらにシーケンス番号を返しました。

システムは最後の呼び出しを行い、必要に応じて終結処理できます。 次のような結果になります。

技術情報code03

できあがりです!
ライブラリー情報の表を生成できますが、これはあえて別の表に結合するような表ではありません。

技術情報code04

2 つの表を結合して、各ライブラリーの説明文をまとめます。

技術情報code05

Run SQL Scripts と Squirrel でこの関数を使用し、両方で正常に動作しています。Run SQL Scripts でライブラリー・リストを変更するには、CL コマンドの先頭に CL (大文字小文字は問いません) を付加し、セミコロンで終了します。

技術情報code06

Squirrel では QCMDEXC サービスを呼び出します。

技術情報code07

DspLibl 関数は 1 つの短い RPG モジュールから構築されています。この記事の先頭で、ソース・コードをダウンロードできます。 関数を作成するには、以下の 3 つの手順が必要です。

1.モジュールを作成する。
2.サービス・プログラムを作成する。
3.SQL 関数を作成する。

RPG ソース・コードに必要な作成コマンドが保存されます。 GUI SQL インターフェースとシステムへのアクセス!これを両立させることができそうです。ユーザー定義表関数で、どんな素晴らしい関数以外のことをするつもりでしょうか。

ページトップ

ボタン