従来のレポート生成システムのため、ストアドプロシージャからの結果セットをトラバースするにはカーソルを使用する必要があります。システムは、結果セットの各行からデータを印刷することによってレポート出力を生成します。レポートシステムのリファクタリングは、この問題の範囲をはるかに超えています。
私の知る限り、DECLARE CURSOR構文では、そのソースがSELECT句である必要があります。ただし、使用する必要のあるクエリは、動的SQLを生成して実行する1000行以上のストアドプロシージャに存在します。
ストアドプロシージャからカーソルに結果セットを取得する方法を知っている人はいますか?
私は明白なことを試みました:
Declare Cursor c_Data For my_stored_proc @p1='foo', @p2='bar'
最後の手段として、ストアドプロシージャを変更して、実行する代わりに生成する動的SQLを返すことができます。次に、この返されたSQLを別の文字列に埋め込んで、最後に実行できます。何かのようなもの:
Exec my_stored_proc @p1='foo', @p2='bar', @query='' OUTPUT
Set @sql = '
Declare Cursor c_Data For ' + @query + '
Open c_Data
-- etc. - cursor processing loop etc. goes here '
Exec @sql
何かご意見は?カーソルを介してストアドプロシージャから結果セットをトラバースする他の方法を知っている人はいますか?
ありがとう。