プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (1件)

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/24 00:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す