我有个字符串,长度会达到10万以上,而oracle的缓冲区貌似只有32767,用存储过程插入oracle会报字符串超长的错误,网上搜了一下,好像说可以用dbms_lob.write()方法,本人比较菜,看不懂网上的例子,请教高手到底怎么用?
比如表结构如下:
id  number(10) primary key,
str_val clob
就这两个字段,请问如何将一条长度为10万的字符串插入表中?
或者不用dbms_lob.write()也行,只要能插到表中就行。
请高手不吝赐教,在线等,谢谢。

解决方案 »

  1.   

    用blob处理吧。BLOG最大为4GB,要先插入一个空的,再以流的形式写进去。
      

  2.   

    clob也是4G吧,不是字段长度不够,是oracle的缓冲区不够,缓冲区只能存放32767的长度,所以会报错。楼上帅哥说的以流的形式写进去是怎么个方法?求详解和例子,十分感谢。
      

  3.   

    conn.setAutoCommit(false);                 
    String   sqlInsert   =   "INSERT   INTO   FISHBONE_DIAGRAM   (   FISHBONE_DIAGRAM_ID,TIPS_ID,   DIAGRAM_RAWDATA)   VALUES   (100,   2,   empty_blob()   ) "; 
    stmt.executeUpdate(sqlInsert); ResultSet   rset=stmt.executeQuery( "SELECT   DIAGRAM_RAWDATA   FROM   FISHBONE_DIAGRAM   where   FISHBONE_DIAGRAM_ID=100   for   update "); 
    byte[]   b   =   new   byte[3]; 
    b[0]= 'a '; 
    b[1]= 'b '; 
    b[2]= 'c '; 
    if   (rset.next())   { 
      oracle.sql.BLOB   blob   =   (oracle.sql.BLOB)   rset.getBlob( "DIAGRAM_RAWDATA "); 
      OutputStream   out   =   blob.getBinaryOutputStream(); 
                                      out.write(b); 
                                      out.flush(); 
                                      out.close(); } 
      

  4.   

    或者设置一下你的缓冲区大小
    http://topic.csdn.net/t/20040915/18/3376085.html
      

  5.   

    一般情况下,clob类型的数据直接insert可能会因为字符过长而出错,所以要用对象形式来插入
    先插入个空值,在实例化CLOB对象来赋值