Clob的字段,我发现在不能用sql语句插入大于4000的字符。请问这种情况我应该怎么做呢?

解决方案 »

  1.   

    先用值empty_clob()插入新记录,然后再更新。lob对象实现成流,就可以不断向里面写入数据了。
      

  2.   

    的确是这样,如果你用.NET的话,可以其中OracleLob的方法OracleLob.Write()往里写数据。
      

  3.   

    1楼的,那个我看过了,不过能不能具体点?
    2楼的,我试过,但是好像不行,还是说字符串过长
    insert table1 (clobfield) values (empty_clob());
    update table1 set clobfield='[很长的字符串]';
    是这样的吗?
    3楼的,不是用.net,是要生成sql脚本。
      

  4.   

    upup
    不会把,这个问题不算什么高深问题吧,那位大哥来指点一下阿。
      

  5.   

    以为你要用.NET呢,用SQL操作LOB字段还真不知道怎么弄。
      

  6.   

    强烈关注,我也很郁闷这个呢。
    觉得LONG就是个废物,那么大的类型,结果insert时还要受4000字节的限制,和varchar有什么区别。搞不懂
      

  7.   

    测试通过
    先读出来再更新,col2  为clob类型字段declare  
    locator_var    CLOB;  
    amount_var    integer;  
    offset_var    integer;  
    output_var    varchar2(10);  
    c_clob varchar2(1000);
    begin  c_clob := '123456789123456789';
    amount_var  :=length(c_clob);  
    offset_var  :=  20;  
    select  col2  into  locator_var    from  MOtest for update;  
    dbms_lob.write(locator_var, amount_var, offset_var, c_clob);End;
      

  8.   

    强烈关注,我也很郁闷这个呢。
    觉得LONG就是个废物,那么大的类型,结果insert时还要受4000字节的限制,和varchar有什么区别。搞不懂
    --------------------------------------------------
    不是因为Long不能大于4000,是因为Oracle最多支持 4000长度的sql,
    因为你的内容多于4000,最终造成产生的Insert语句长于4000.
      

  9.   

    to:楼上
    那我们最常用的不就是insert吗?如果insert不能超过4000,很多事不方便。
      

  10.   

    好久不来,居然还有人跟贴子。
    moqijun(百分比)正解。
    原理如下:对于CLOB字段:
        1、插入记录,EMPTY_CLOB(),初始化字段。
        2、获取CLOB字段指针,select into for update 或者利用insert 语句的return 选项获取。
        3、加载数据,dbms_lob.WRITEAPPEND
     
    以上为PL/SQL方法,各种语言实现思路一般也是获取指针,然后读文件写入数据,