2

我们正在尝试在 CLOB 字段中应用子字符串功能来修剪前 4000 个字符。我们收到以下错误消息。

下面是我们正在使用的查询:

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 回答
3

VARCHAR 的限制是 4000个字节而不是字符。如果您的数据库字符集是多字节字符集substr(field_name,1,4000)将太长。(错误消息中的 8000 表明每个字符使用 2 个字节,所以 UTF16 可能?)。

尝试 :

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

但请注意,2000 个字符可能需要超过 4000 个字节(这取决于您的数据库字符集和您正在编码的文本)。

于 2013-10-18T20:38:05.923 回答
0

试试下面的功能。这应该可以解决您的问题。

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