ORA-06502: PL/SQL: 数字或值错误:character string buffer too small(DBMS_LOB.SUBSTR(CLOB) 报错:超过缓存区长度)
DBMS_LOB.SUBSTR() 会将clob转为 varchar2,而varchar2是有长度限制的 为4000(存储过程里Oracle 10g最大为4000, Oracle 12 可达32767)。当大字段超过4000时就会报错。解决方法:对CLOB字段进行截取然后在进行拼接,截取的长度根据存储的是汉字和数据决定长度。--第二位表示要截取的字符串的长度--第三位表示截取字符串的开始位置(注:
·
DBMS_LOB.SUBSTR() 会将clob转为 varchar2,而varchar2是有长度限制的 为4000(存储过程里Oracle 10g最大为4000, Oracle 12 可达32767)。
当大字段超过4000时就会报错。
解决方法:
对CLOB字段进行截取然后在进行拼接,截取的长度根据存储的是汉字和数据决定长度。
--第二位表示要截取的字符串的长度
--第三位表示截取字符串的开始位置(注:等于0或1时,都是从第一位开始截取)
SELECT dbms_lob.substr('xxxxx',3000,1)||dbms_lob.substr('xxxxx',3000,3001) FROM dual;
更多推荐
已为社区贡献21条内容
所有评论(0)