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

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

Mike Larsen 著

ストアード プロシージャーの記事シリーズの続きとして、この記事では、結果セットを返すSQLストアード プロシージャーを作成する方法について説明しようと思います。これは、RPGを使用して作成する方法を説明した前回の記事によく似ています。今回の例では、SQLのみを使用して同じ結果を実現します。

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

図1.SQLスクリプト

12行目では、まだ作成されていない場合はスクリプトを作成し、すでに存在する場合はそれを置き換えるように指示しています。

13行目および14行目では、このストアード プロシージャーがSQLを使用し、1つの結果セットを返すことを示しています。

この記事で使用されているコードは、こちらからダウンロードできます。

18行目は、カーソルを宣言し、クライアントまたはサービス利用者にデータを返すことを示しています。カーソルは、結果表にアクセスする方法を提供します。20~27行目は、「部門」表から列を選択します。列のいくつかがNULL可能であるので、列がNULLである場合は「 N/A 」を表示するためのコードを追加しています。29行目で、結果表の行を処理するのに使用できるように、カーソルをオープンします。

前記事と同様に、VS Code Db2 for i でこのスクリプトを実行します(図2)。

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

callステートメントは、以前と同じです。ストアード プロシージャーにパラメーターを何も渡していないので、括弧内には何もありません。スクリプトを実行すると、結果がDb2 for i で表示されます(図3)。

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

予想通り、結果はRPGストアード プロシージャーからの結果セットと同じです。では、どうしてRPGとSQLの両方のストアード プロシージャーを示したのでしょうか。私が意図したのは、どちらが使いやすいかは人それぞれだとしても、同じ目的を実現する複数の方法があることを示すことでした。

これで、ストアード プロシージャーの記事シリーズは完結です。これらのツールが、私のプログラミングの道具箱に加わりました。これらのツールが、皆さんのお役にも立てば幸いです。

あわせて読みたい記事

PAGE TOP