SET RESULT SETS
SET RESULT SETS ステートメントでは、プロシージャーから返すことができる結果セットを指定します。
呼び出し
アプリケーション・プログラムまたは SQL プロシージャーに組み込むことが、このステートメントの唯一の使用方法です。これは実行可能ステートメントですが、動的に準備することはできません。このステートメントは、Java™ または REXX プロシージャーでは使用できません。
権限
権限は不要です。
構文
.-TO CALLER-. .-WITH RETURN--+-----------+-. | '-TO CLIENT-' | >>-SET RESULT SETS--+----------------------------+--------------> .-,----------------------------------------. V | >--+---+-ARRAY -ホスト構造体配列--FOR--variable--ROWS-+-+-+------------>< | '-CURSOR--cursor-name------------------' | '-NONE-----------------------------------------'
説明
- WITH RETURN
- カーソルの結果表を、プロシージャーから戻される結果セットとして使用するように指定します。
スクロール可能ではないカーソルの場合、結果セットには、現行カーソル位置から結果表の最後までのすべての行が含まれます。 スクロール可能なカーソルの場合、結果セットには、結果表のすべての行が含まれます。
- TO CALLER
- カーソルがプロシージャーの呼び出し側に結果セットを戻せることを指定します。 例えば、呼び出し側がクライアント・アプリケーションである場合、 結果セットはそのクライアント・アプリケーションに戻されます。
- TO CLIENT
- カーソルがクライアント・アプリケーションに結果セットを戻せることを指定します。 このカーソルは、中間にネストされたプロシージャーからは見えません。 関数またはトリガーが直接または間接的にプロシージャーを呼び出すと、結果セットはクライアントに返されず、プロシージャーの終了後にカーソルがクローズされます。
- CURSOR cursor-name
- プロシージャーから戻される可能性がある結果セットを定義するために使用するカーソルを識別します。 このカーソル名 は、 DECLARE CURSOR ステートメントに関する 説明で説明している宣言されたカーソルを 識別していなければなりません。SET RESULT SETS ステートメントの実行時点では、カーソルはオープン状態であることが必要です。割り当てカーソルは指定できません。
- ARRAY host-structure-array
- ホスト構造体配列 は、ホスト構造体の宣言に関する
規則に従って定義されているホスト構造体の配列を識別します。
この配列には、C の NUL で終了するホスト変数を入れることはできません。
配列の最初の構造体が最初の行に対応し、配列の 2 番目の構造体が 2 番目の行に対応するというように、 順番に対応しています。さらに、行の最初の値が構造体内の最初の項目に対応し、 行の 2 番目の値が構造体の 2 番目の項目に対応するというように、 これも順番に対応しています。
DRDA® を使用する場合に、LOB と XML を配列で返すことはできません。
1 つの SET RESULT SET ステートメントに指定できるのは 1 つの配列のみで、これにはプロシージャーへのネストされた呼び出しからの RETURN TO CLIENT 配列結果セットがすべて含まれます。
- FOR variable ROWS
- 結果セットの行数を指定します。変数 は、 位取りがゼロの数値変数であることが必要であり、標識変数を含んでいてはなりません。 変数をグローバル変数にすることはできません。指定する行数は 0 から 32767 までの範囲になければならず、 ホスト構造体配列のディメンション以下でなければなりません。
- NONE
- 結果セットを戻さないことを指定します。 プロシージャーが終了した際に、オープン状態のカーソルは戻されません。
注
結果セットの詳細については、プロシージャーからの結果セットおよび WITH RETURN 文節を参照してください。
外部プロシージャー: 外部プロシージャーから 結果セットを戻すには、次の 3 つの方法があります。
- SET RESULT SETS ステートメントがプロシージャーで実行される場合は、その SET RESULT SETS ステートメントが結果セットを識別します。結果セットは、SET RESULT SETS ステートメントで指定した順序で戻されます。
- SET RESULT SETS ステートメントがプロシージャーで実行されない場合
- WITH RETURN 文節でカーソルが指定されていない場合、プロシージャーがオ ープンし、オープン状態のまま戻す各カーソルが、それぞれ 1 つの結果セッ トを識別します。結果セットは、カーソルがオープンされた順序で戻されます。
- WITH RETURN 文節でカーソルが指定されている場合、WITH RETURN 文節 で定義されたカーソルのうち、プロシージャーがオープンし、オープン状態 のまま戻す各カーソルが、それぞれ 1 つの結果セットを識別します。 結果セットは、カーソルがオープンされた順序で戻されます。
オープン・カーソルを使用して結果セットが戻される場合、現行カーソル 位置から始まる行が戻されます。
プロシージャーから結果セットを戻すには、ALTER PROCEDURE (外部)、CREATE PROCEDURE (外部) ステートメント、または DECLARE PROCEDURE ステートメントで RESULT SETS 文節を指定してください。 戻される結果セットの最大数は、ALTER PROCEDURE (外部)、CREATE PROCEDURE (外部) ステートメント または DECLARE PROCEDURE ステートメントに指定した数を超えることはできません。
SQL プロシージャー: SQL プロシージャーから 結果セットを戻すためには、RESULT SETS 文節を指定してプロシージャーを 作成する必要があります。 WITH RETURN 文節で定義されたカーソルのうち、プロシージャーがオープン し、オープン状態のまま戻す各カーソルが、それぞれ 1 つの結果セットを識 別します。
- プロシージャー内で SET RESULT SETS ステートメントが実行される 場合は、その SET RESULT SETS ステートメントに指定されている結果セットが 戻されます。 結果セットは、SET RESULT SETS ステートメントで指定した順序で戻されます。
- プロシージャー内で SET RESULT SETS ステートメントが実行されない 場合は、結果セットはカーソルがオープンされた順序で戻されます。
オープン・カーソルを使用して結果セットが戻される場合、現行カーソル 位置から始まる行が戻されます。
SQL プロシージャーからなんらかの結果セットを戻すには、 CREATE PROCEDURE (SQL) ステートメントで RESULT SETS 文節を指定する必要があります。 戻される結果セットの最大数は、CREATE PROCEDURE ステートメントに指定した数を超えることはできません。
例
次の SET RESULT SETS ステートメントは、カーソル X を、 プロシージャーが呼び出されるときに戻される結果セットとして指定します。ODBC クライアントからの結果セットの使用についての詳細な説明と例につい ては、「IBM® i Access Family」トピック集を参照してください。
EXEC SQL SET RESULT SETS CURSOR X;