SQLプロシージャの動的結果セットには、次のルールおよび制限が適用されます。
- いずれのパラメータも、TD_ANYTYPEデータ型にすることはできません。
- 動的結果セットは、単一SELECTリクエストに対してのみ返すことができます。
動的結果セットに対して、複文SELECTリクエストは有効ではありません。
- 動的結果セットを、呼び出されたプロシージャと呼出し側プロシージャまたは呼出し側クライアント アプリケーションの両方に返すことはできません。
- 動的結果セットを返す場合、開いたカーソルを閉じることはできません。
- 動的結果セットの受け手は、ドライバ(CLIv2またはODBCなど)を使用して結果を受け入れることを示す必要があります。詳細については、<Teradata® CLI V2メインフレーム接続システム、B035-2417>、<Teradata® CLI V2ワークステーション接続システム、B035-2418>、および<ODBC Driver for Teradata®ユーザー ガイド>を参照してください。
- プロシージャがカーソルを結果セット カーソルとして使用することを指定するには、WITH RETURN ONLY句を使用します。
- カーソルのルールは、次のリストで示す変更点および制限を除き、動的結果セットをサポートしないプロシージャのルールと同じです(詳細はTeradata Vantage™ - SQLストアド プロシージャおよび埋め込みSQL、B035-1148を参照)。
- 結果セットを処理しない限り、カーソルにPREPAREを指定することはできません。
- 結果セットを処理しない限り、カーソルにOPEN ... USINGを指定することはできません。
- WITH RETURN句とともにFOR UPDATEを指定することはできません。
- WITH RETURN ONLY …を指定した場合、カーソルを開いたプロシージャ内でカーソルを取り出すことはできません。
- いったん開かれたら、動的結果セット カーソルを閉じることはできません。
これは、カーソルを閉じると結果セットが返されなくなるためです。
- 返された結果セットは、次のCLIv2応答属性を、作成したプロシージャからではなく、呼び出し側から継承します。
- 応答モード
- 応答保持
- LOB応答モード
例えば、結果セットを生成するBTEQからCALLを実行する場合、プロシージャに送信される結果セットは標識モードであるのに対して、BTEQに送信される結果セットはフィールド モードです。詳細については、<Teradata® CLI V2メインフレーム接続システム、B035-2417>または<Teradata® CLI V2ワークステーション接続システム、B035-2418>を参照してください。
- 返された結果セットの照合順序は、呼出し側またはセッションの照合順序ではなく、呼び出されたプロシージャの照合順序です。
- 返された結果セットの開始位置および返された結果セットの行セットは、カーソルのスクロール機能によって決定されます。
システムは常に結果セット全体を返します。
- 次の表に示すように、システムが生成するデータ量に基づき、さまざまなオプションがパフォーマンスに影響を与えます。
オプション 呼び出し側がプロシージャの場合 呼び出し側がクライアント アプリケーションの場合 WITH RETURN ONLY - システムは呼び出しプロシージャに対して1つの結果スプール テーブルを生成します。
- システムはクライアント アプリケーションに対して1つの結果スプール テーブルを生成します。
プロシージャから行を取り出そうとすると、システムはSQLSTATEの'02000'の値を返します。
WITH RETURN ONLY TO CLIENT - システムはクライアント アプリケーションに対して1つの結果スプール テーブルを生成します。
- システムはクライアント アプリケーションに対して1つの結果スプール テーブルを生成します。
WITHOUT RETURN - システムは1つの結果スプール テーブルを生成します。
- プロシージャが存在するとき、または定義された複合ブロック カーソルが終了されるとき、スプールが閉じられます。
- システムは1つの結果スプール テーブルを生成します。
- プロシージャが存在するとき、または定義された複合ブロック カーソルが終了されるとき、スプールが閉じられます。
- 再帰的ビューおよび再帰的クエリーは、プロシージャ定義から参照できません。
- WITH句はプロシージャ定義から参照できません。