メニューボタン
IBMi海外記事2025.05.14

結果セットを返すRPGストアード プロシージャーを作成する

Mike Larsen 著

前回の記事では、パラメーターを使用するRPGストアード プロシージャーを作成する方法について説明しました。今回の記事では、結果セットを返すRPGストアード プロシージャーを作成する方法を説明します。おそらく、このシナリオの方が、より頻繁に遭遇する可能性があると思われます。この例で使用されるデータは、IBMの「 Sample (サンプル)」データベースの「 Department (部門)」表からのデータです。

ここでは、「部門」表からすべての行を選択するRPGプログラム(図1)を作成しました。その表に多くの行がないことは分かっているので、選択基準は何も追加しませんでしたが、本番プログラムを実装するときには、選択される行数を制限してもよいかもしれません。このプログラムのソース コードは、ダウンロードして利用することができます。

図1.RPGプログラム

まずは、カーソルを宣言し、クライアントまたはサービス利用者へデータを返すことを示します(33行目)。カーソルは、結果表にアクセスする方法を提供します。35~40行目は、「部門」表から列を選択します。列のいくつかがNULL可能であるので、列がNULLである場合は「 N/A 」を表示するためのコードを追加しています。43行目でカーソルをオープンし、46行目でカーソルと結果セットを関連付けます。RPGプログラムはここまでです。

次に、SQLスクリプトを作成して、このRPGプログラムをストアード プロシージャーとしてカタログ化します(図2)。

図2.RPGプログラムをストアード プロシージャーとしてカタログ化する

17行目では、ライブラリー MLLIB内でストアード プロシージャーを作成または置き換えすることをシステムに伝えています。ストアード プロシージャー名は、 MLRSTRPROCです。

前回の記事では、18行目および19行目は、ストアード プロシージャーの入出力パラメーターを定義するために使用されていました。このプロシージャーではパラメーターがないので、これらの行をブランクにしています。

このプロシージャーで結果セットを返すので、21行目でそのことを示しています。このプロシージャーによって返されるのは、1つの結果セットのみですが、選択すれば、複数の結果セットが返されるようにすることもできます。

22行目は、ストアード プロシージャーがRPGプログラムを利用することを指示します。

23行目の「Modifies SQL Data 」は、このプロシージャーが、プロシージャーでサポートされていないステートメント以外のすべてのSQLステートメントを実行できることを指定します。

24行目は、プロシージャーで呼び出されるRPGプログラムの場所を示します。

プログラムのコメント セクション(8行目)で、ストアード プロシージャーを作成するのに使用したステートメントを示しています。

ここでは、VS Codeでこのスクリプトを実行します(図3)が、ACSで実行することもできます。

図3.VS Codeからストアード プロシージャーを呼び出す

ここでは、Db2 for iを使用してプロシージャーを実行しています。パラメーターを何も渡していないので、括弧内には何もありません。スクリプトを実行すると、結果がDb2 for iで表示されます(図4)。

図4.ストアード プロシージャーの結果

少量のコードで、複数のプラットフォームから利用できる有用なツールを構築することができました。次回の記事では、SQLを使用するのみで結果セットを返すストアード プロシージャーを作成する予定です。

あわせて読みたい記事

PAGE TOP