日期:2014-05-17  浏览次数:20876 次

clob 和varchar2的转换问题
过程中 有个变量 V_GZ clob;  
dbms_lob.getlength(V_GZ)=4000
 我想 把他存到varchar2变量 v_gz_new里面
我用 这个
v_gz_new :=dbms_lob.substr(V_GZ,4000,1);
就会报错string buffer too small
截取2000的时候不报错

然后我又想分开拼接
v_gz_new1 :=dbms_lob.substr(V_GZ,2000,1);
v_gz_new2 :=dbms_lob.substr(V_GZ,2000,2000);
v_gz_new :=v_gz_new1||v_gz_new2;结果拼接的这句又报错了 
请问各位大神,这个怎么解决呢?

------解决方案--------------------
CLOB存放的是字符集,varchar2存放的是字节,一个字符可以包含多个字节,从你的描述中可以看出你的环境是一个字符包含2个字节,而varchar2的最大长度是4000个字节,所以你只能取v_gz_new1 :=dbms_lob.substr(V_GZ,2000,1);