結果セットを返すRPGストアード プロシージャーを作成する
前回の記事では、パラメーターを使用するRPGストアード プロシージャーを作成する方法について説明しました。今回の記事では、結果セットを返すRPGストアード プロシージャーを作成する方法を説明します。おそらく、このシナリオの方が、より頻繁に遭遇する可能性があると思われます。この例で使用されるデータは、IBMの「 Sample (サンプル)」データベースの「 Department (部門)」表からのデータです。
ここでは、「部門」表からすべての行を選択するRPGプログラム(図1)を作成しました。その表に多くの行がないことは分かっているので、選択基準は何も追加しませんでしたが、本番プログラムを実装するときには、選択される行数を制限してもよいかもしれません。このプログラムのソース コードは、ダウンロードして利用することができます。
まずは、カーソルを宣言し、クライアントまたはサービス利用者へデータを返すことを示します(33行目)。カーソルは、結果表にアクセスする方法を提供します。35~40行目は、「部門」表から列を選択します。列のいくつかがNULL可能であるので、列がNULLである場合は「 N/A 」を表示するためのコードを追加しています。43行目でカーソルをオープンし、46行目でカーソルと結果セットを関連付けます。RPGプログラムはここまでです。
次に、SQLスクリプトを作成して、このRPGプログラムをストアード プロシージャーとしてカタログ化します(図2)。
17行目では、ライブラリー MLLIB内でストアード プロシージャーを作成または置き換えすることをシステムに伝えています。ストアード プロシージャー名は、 MLRSTRPROCです。
前回の記事では、18行目および19行目は、ストアード プロシージャーの入出力パラメーターを定義するために使用されていました。このプロシージャーではパラメーターがないので、これらの行をブランクにしています。
このプロシージャーで結果セットを返すので、21行目でそのことを示しています。このプロシージャーによって返されるのは、1つの結果セットのみですが、選択すれば、複数の結果セットが返されるようにすることもできます。
22行目は、ストアード プロシージャーがRPGプログラムを利用することを指示します。
23行目の「Modifies SQL Data 」は、このプロシージャーが、プロシージャーでサポートされていないステートメント以外のすべてのSQLステートメントを実行できることを指定します。
24行目は、プロシージャーで呼び出されるRPGプログラムの場所を示します。
プログラムのコメント セクション(8行目)で、ストアード プロシージャーを作成するのに使用したステートメントを示しています。
ここでは、VS Codeでこのスクリプトを実行します(図3)が、ACSで実行することもできます。
ここでは、Db2 for iを使用してプロシージャーを実行しています。パラメーターを何も渡していないので、括弧内には何もありません。スクリプトを実行すると、結果がDb2 for iで表示されます(図4)。
少量のコードで、複数のプラットフォームから利用できる有用なツールを構築することができました。次回の記事では、SQLを使用するのみで結果セットを返すストアード プロシージャーを作成する予定です。