是chr(13)吗?
position := DBMS_LOB.Instr(v_CLOBLocator, chr(13));
这样写还是会有错!

解决方案 »

  1.   

    好像chr(13)没用,应该是chr(10)。
    我想找到第一个回车的位置position := DBMS_LOB.Instr(v_CLOBLocator, chr(10));是63,
    然后我要把这个clob的前63个字符切掉,DBMS_LOB.erase(v_CLOBLocator, position, 1);
    这样clob里的数据,第一行的确没了,可是第二行数据第一个字符前莫名其妙的多出好多空格符。我以为是少减了一个字符的关系,所以给position+1再次erase,可这次第二行的第一个字符也被切掉了。那么那些空格符怎么去掉呢?
      

  2.   

    SQL> select trim('   abc   ') trim from dual;TRI
    ---
    abc
      

  3.   

    那我clob字段怎么trim呢,DBMS_LOB也有trim方法,不过好像和一般的trim不一样,是这样定义的:
    This procedure trims the value of the internal LOB to the length you specify in the newlen parameter. 
    DBMS_LOB.TRIM (
       lob_loc        IN OUT  NOCOPY CLOB CHARACTER SET ANY_CS,
       newlen         IN             INTEGER);
      

  4.   

    use trim()  -> use dbms_lob...
      

  5.   

    还是研究一下为什么DBMS_LOB.erase后会出空格的原因吧。DBMS_LOB.trim是截掉超出指定长度的部分用的。
      

  6.   

    erase后出空格的原因很简单,就是它的定义是仅仅删除字符,并不缩小长度,说白了就相当于把一部分字符转变成空格。
    whan1234:你看该用什么方法呢?
      

  7.   

    那就用了DBMS_LOB.erase后再用DBMS_LOB.copy把position+1位开始的数据拷贝出来吧。