こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【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
<<省略>>
)

投稿日時 - 2008-12-22 15:25:55

QNo.4575204

すぐに回答ほしいです

質問者が選んだベストアンサー

残念ですが、9iであればDBMS_SQLを使うしかないでしょう。

投稿日時 - 2008-12-23 00:06:23

お礼

Oracleは9iです。
DBMS_SQLというものがあるのですね。
ありがとうございました!

投稿日時 - 2008-12-24 00:33:38

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)