oracle ORA-06502:PL/SQL:数值或值错误:字符串缓冲区在连接运算符中太小||

pw136qt2  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(176)

我有一个250,000个字符的字符串,我想把这个值复制到clob类型。我分块到8块(varchar2类型),然后我想转换为clob格式,但我得到这个错误:

ORA-06502: PL/SQL: numeric or value error: character string buffer too small

我的代码:

declare   vstr_part1 varchar2(32767) := ' long string with  32,670  length '  
vstr_part2 varchar2(32767) := ' long string with  32,670  length ' 
vstr_part3 varchar2(32767) := ' long string with  32,670  length ' 
vstr_part4 varchar2(32767) := ' long string with  32,670  length ' 
vstr_part5 varchar2(32767) := ' long string with  32,670  length ' 
vstr_part6 varchar2(32767) := ' long string with  32,670  length ' 
vstr_part7 varchar2(32767) := ' long string with  32,670  length ' 
vstr_part8 varchar2(32767) := ' long string with  32,670  length '
vClobVal   clob;
vClobVal :=  vstr_part1 ||  vstr_part2 ||  vstr_part3 ||vstr_part4 || vstr_part5||  vstr_part6 ||vstr_part7 ||vstr_part8 ;

当我只使用两个块工作,但超过2块,我得到同样的错误。
我错在哪里?

rlcwz9us

rlcwz9us1#

代码中唯一的错误是首先使用TO_CLOB函数将varchar 2转换为CLOB,然后才能连接它们-

declare   vstr_part1 varchar2(32767) := ' long string with  32,670  length '  
vstr_part2 varchar2(32767) := ' long string with  32,670  length ' 
vstr_part3 varchar2(32767) := ' long string with  32,670  length ' 
vstr_part4 varchar2(32767) := ' long string with  32,670  length ' 
vstr_part5 varchar2(32767) := ' long string with  32,670  length ' 
vstr_part6 varchar2(32767) := ' long string with  32,670  length ' 
vstr_part7 varchar2(32767) := ' long string with  32,670  length ' 
vstr_part8 varchar2(32767) := ' long string with  32,670  length '
vClobVal   clob;
BEGIN
vClobVal :=  TO_CLOB(vstr_part1) || TO_CLOB(vstr_part2) || TO_CLOB(vstr_part3)  || TO_CLOB(vstr_part4) || TO_CLOB(vstr_part5) || TO_CLOB(vstr_part6) || TO_CLOB(vstr_part7) || TO_CLOB(vstr_part8);
END;
/

Demo.

相关问题