2009-06-30 23 views
2

一連の行を返すストアドプロシージャまたは関数を作成する必要があります。私はストアドプロシージャで私はSELECT * FROM table成功することができることに注意しました。ループ内で行をフェッチし、ループ実行ごとに一度SELECT something, something_other FROM tableを実行すると、1つの結果しか得られません。ストアドプロシージャ/関数から複数の行を返すMySql

私がする必要があるのは、ループを行い、計算を行い、行セットを返すことです。これを行う最善の方法は何ですか?一時的なテーブル?ストアド関数?

助けてください。

答えて

3

ループを実行するためにストアドプロシージャの本体の内部にカーソルを使用しているようですね?

私の最初の助言は、カーソルに頼らずに1つのクエリで計算を実行することです。正確に何が計算されますか?

実際にカーソルを使用する必要がある場合は、各ループの結果をテンポラリ・テーブルにINSERTし、ループが終了したらそのテーブルからSELECT *を実行します。

0

複数の結果セットを返すことはできますが、クライアントライブラリがそれをサポートしており、クライアントがそれを期待している場合に限ります。あるものはそうしないので、それらを使用すると、順序外れのエラーが発生します。

あなたは確かに一時テーブルを選択し、そこから選択して安全なプロシージャ内にドロップすることができます。別のオプションは、必要なすべての行を戻して実行する準備済みSQL文を使用してUNION選択を作成することです。それは少し乱雑です。

関連する問題