o_str := dbms_lob.substr(v_clob,amount,1);
参数中dbms_lob.getlength(v_clob)=3625;amount该填什么值能完整的把clob转换成varchar2,其中该clob中含中文字符。在线等各位大牛解答~

解决方案 »

  1.   

    1、建立一个临时varchar2字段用来保存数据2.将clob的内容截取后更新到varchar2字段中update table_wonder set tempcolumn = dbms_lob.substr(clobcolumn,4000);3.drop掉clob字段4.将临时varchar2字段改名alter table table_wonder rename column tempcolumn to column; 另外rename语句在9.2以上版本支持,在pl/sql developer 7.0版本的command window中不支持,需要使用sqlplus。列出lob类型不支持的sql语句本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wonder4/archive/2006/12/28/1465895.aspx
      

  2.   


    dbms_lob.substr(clobcolumn,4000)这个方法在clob内容超过4k字节,且是中英文都存在的时候,不好截取
      

  3.   

    SQL> select * from a ;
     
            ID NAME
    ---------- --------------------------------------------------------------------------------
             1 1还4
     
    SQL> desc a
    Name Type   Nullable Default Comments 
    ---- ------ -------- ------- -------- 
    ID   NUMBER Y                         
    NAME CLOB   Y    
                         
    SQL>  select id,dbms_lob.getlength(name) from a;
     
            ID DBMS_LOB.GETLENGTH(NAME)
    ---------- ------------------------
             1                        7
      
    SQL>  select id,dbms_lob.substr(name,1,1) from a ;
     
            ID DBMS_LOB.SUBSTR(NAME,1,1)
    ---------- --------------------------------------------------------------------------------
             1 1
     
    SQL>  select id,dbms_lob.substr(name,2,1) from a ;
     
            ID DBMS_LOB.SUBSTR(NAME,2,1)
    ---------- --------------------------------------------------------------------------------
             1 1还
     
    SQL>  select id,dbms_lob.substr(name,3,1) from a ;
     
            ID DBMS_LOB.SUBSTR(NAME,3,1)
    ---------- --------------------------------------------------------------------------------
             1 1还4
     
    SQL>  select id,dbms_lob.substr(name,4,1) from a ;
     
            ID DBMS_LOB.SUBSTR(NAME,4,1)
    ---------- --------------------------------------------------------------------------------
             1 1还4
     
    SQL>  select id,dbms_lob.substr(name,5,1) from a ;
     
            ID DBMS_LOB.SUBSTR(NAME,5,1)
    ---------- --------------------------------------------------------------------------------
             1 1还4
     
    SQL>  select id,dbms_lob.substr(name,6,1) from a ;
     
            ID DBMS_LOB.SUBSTR(NAME,6,1)
    ---------- --------------------------------------------------------------------------------
             1 1还4
     
    SQL>  select id,dbms_lob.substr(name,7,1) from a ;
     
            ID DBMS_LOB.SUBSTR(NAME,7,1)
    ---------- --------------------------------------------------------------------------------
             1 1还4
     
    SQL> 
      

  4.   

    呵呵,你举例很详细,但是没有说到点子上。str := dbms_lob.substr(name,7,1),这里的第二个参数是字符个数,然后str这个字符串不能超过4k;比如第二个参数是3000,但clob内容全是中文的话,就会报错了,报错原因就是字符串缓冲区太小
      

  5.   

    比如
    SQL> select length('汉'),lengthb('汉') from dual;
     
     LENGTH('汉')  LENGTHB('汉')
    ------------ -------------
               1             2
     
    SQL> 
    那就取2000个字符.
      

  6.   

    dbms_lob.substr的最大长度4000是以byte计算的.处理中文的确比较麻烦.