2

最初の 4000 文字をトリミングするために、CLOB フィールドに部分文字列関数を適用しようとしています。次のエラー メッセージが表示されます。

以下は、使用しているクエリです。

select
cast(substr(field_name,1,4000) as varchar(4000))
from table_name;

エラーレポート:

SQL エラー: ORA-22835: CLOB から CHAR または BLOB から RAW への変換にはバッファーが小さすぎます (実際: 8000、最大: 4000)
22835.00000 - "CLOB から CHAR または BLOB から RAW への変換にはバッファーが小さすぎます (実際: %s 、最大: %s)"
*原因: CLOBをCHARまたはBLOBをRAWに変換しようとしましたが、LOBサイズがCHARおよびRAW型のバッファ制限よりも大きくなっています。列に対して文字長セマンティクスが有効な場合、幅は文字単位でレポートされます。それ以外の場合、幅はバイト単位でレポートされます。
*処置: 次のいずれかを実行します。 1. 変換を実行する前にLOBを小さくします。たとえば、CLOBでSUBSTRを使用します。 2. DBMS_LOB.SUBSTRを使用して、CLOBをCHARまたはBLOBからRAWに変換します。

4

3 に答える 3

4

dbms_lob.substrを使用する代替:

dbms_lob.substr(clob_field_name, desired_size)

キャストは必要ありません。

于 2015-08-07T15:04:42.860 に答える
0

以下の関数を試してください。これで問題が解決するはずです。

SELECT SUBSTR(xmltype(CLOBColumnname),4001,LENGTH(CLOBColumnname)) 
FROM TABLENAME;
于 2013-10-18T19:37:45.487 に答える