Oracle以外の複数のシステムで、ストアド・プロシージャにより結果セットを戻すことができますが、その方法は異なります。通常、Oracle以外のデータベースでの結果セットのサポートは次の2つのモデルのいずれかに基づいています。
モデル1: 結果セットのサポート
ユーザーは、ストアド・プロシージャの作成時に、そのストアド・プロシージャが戻すことのできる結果セットの最大数を明示的に指定できます。実行時には、ストアド・プロシージャは0(ゼロ)から指定された最大数の範囲内で結果セットをオープンできます。ストアド・プロシージャの実行後に、クライアント・プログラムは埋込みSQLディレクティブを使用するか、クライアントのライブラリ・ファンクションをコールして、これらの結果セットへのハンドルを取得できます。その後、クライアント・プログラムは、通常のカーソルと同様に結果セットから取得できます。
モデル2: 結果セットのサポート
このモデルでは、ストアド・プロシージャから戻される結果セット数の制限は指定されていません。モデル1とOracle Databaseにはどちらも制限があります。Oracle Databaseでは、ストアド・プロシージャから戻すことができる結果セットの数はREF CURSOR OUT
引数の数以下です。モデル1では、ストアド・プロシージャ言語のディレクティブを使用して上限が指定されます。モデル2がOracle Databaseおよびモデル1と異なるもう1つの点は、これらでは結果セットに対するハンドルが戻されないことです。かわりに、これらはストアド・プロシージャから戻された結果セット全体を送信します。Oracle DatabaseではハンドルはREF CURSOR OUT
引数です。モデル1では、これはストアド・プロシージャの実行後に別に取得されます。Oracle Databaseとモデル1の両方で、ハンドルが取得された後で、ハンドルに対するフェッチを実行して結果セットのデータが取得されます。複数のカーソルが開いており、任意の順序でフェッチすることができます。ただし、モデル2のケースでは、すべてのデータがすでに送信されています。ストアド・プロシージャによって決定された順序で結果セットが届き、プロシージャの出力引数が最後に届きます。最初の結果セット全体を取得してから2番目の結果セット全体を取得し、すべての結果セットを取得するまで続ける必要があります。最後に、ストアド・プロシージャのOUT
引数が取得されます。