結果セットを返すSQLストアード プロシージャーを作成する
ストアード プロシージャーの記事シリーズの続きとして、この記事では、結果セットを返すSQLストアード プロシージャーを作成する方法について説明しようと思います。これは、RPGを使用して作成する方法を説明した前回の記事によく似ています。今回の例では、SQLのみを使用して同じ結果を実現します。
ここでは、「Departments(部門)」表からすべての行を選択するSQLスクリプト(図1)を作成しました。SQLステートメントは、前記事のRPGプログラムで使用したものと同じですが、ここでも改めて説明します。その表に多くの行がないことは分かっているので、選択基準は何も追加しませんでしたが、本番プログラムを実装するときには、選択される行数を制限してもよいかもしれません。このスクリプトのソース コードは、ダウンロードして利用することができます。
12行目では、まだ作成されていない場合はスクリプトを作成し、すでに存在する場合はそれを置き換えるように指示しています。
13行目および14行目では、このストアード プロシージャーがSQLを使用し、1つの結果セットを返すことを示しています。
この記事で使用されているコードは、こちらからダウンロードできます。
18行目は、カーソルを宣言し、クライアントまたはサービス利用者にデータを返すことを示しています。カーソルは、結果表にアクセスする方法を提供します。20~27行目は、「部門」表から列を選択します。列のいくつかがNULL可能であるので、列がNULLである場合は「 N/A 」を表示するためのコードを追加しています。29行目で、結果表の行を処理するのに使用できるように、カーソルをオープンします。
前記事と同様に、VS Code Db2 for i でこのスクリプトを実行します(図2)。
callステートメントは、以前と同じです。ストアード プロシージャーにパラメーターを何も渡していないので、括弧内には何もありません。スクリプトを実行すると、結果がDb2 for i で表示されます(図3)。
予想通り、結果はRPGストアード プロシージャーからの結果セットと同じです。では、どうしてRPGとSQLの両方のストアード プロシージャーを示したのでしょうか。私が意図したのは、どちらが使いやすいかは人それぞれだとしても、同じ目的を実現する複数の方法があることを示すことでした。
これで、ストアード プロシージャーの記事シリーズは完結です。これらのツールが、私のプログラミングの道具箱に加わりました。これらのツールが、皆さんのお役にも立てば幸いです。