質問: 【pl/sql】sql文が長すぎてselectできない oracle9iのpl/sqlでselect文を発行し 取得したカーソルを返す処理をしています。 where句が動的になる為 実行するsql文が長くなり ora-06502: pl/sql: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しました のエラーが発生します。 そこで、sql文の部分をclob型にしたり sql文を「||」でつなげたり してみましたが、どちらもエラーになりました。 長すぎるsql文を実行するには どうしたらよいでしょうか? 以下ソースです。(左側の数字は行数です) ----------------------------------- 1 procedure テスト(o_カーソル in out 情報カーソル) is 2 type curtype is ref cursor; 3 tmpcur curtype; 4 sqlstrvarchar2(32767); 5 6 7 begin 8 9 sqlstr := 'select ' 10 sqlstr := sqlstr || 'a,b ' 11 sqlstr := sqlstr || 'from' <<省略>> 12 open tmpcur for sqlstr←エラー発生 13o_カーソル := tmpcur;--取得したカーソルを返す 14 end テスト; ----------------------------------- (1)sql文をclob型にしてみる:コンパイルエラー 4 sqlstrclob (2)sql文を「||」でつなげてみる:文字列バッファが小さすぎますでエラー dim sqlstr1varchar2(32767); dim sqlstr2varchar2(32767); dim sqlstr3varchar2(32767); <<省略>> 12 open tmpcur for (sqlstr1 || sqlstr2 || sqlstr3 <<省略>> )
回答: 残念ですが、9iであればdbms_sqlを使うしかないでしょう。