使用function:create or replace function getcontent(v_id IN number,pos in number) return varchar2
IS
     lobloc CLOB;
     buffer VARCHAR2(32767);
     amount NUMBER := 2000;
     offset NUMBER := 1;
BEGIN
     --Initialize buffer with data to be inserted
     SELECT content INTO lobloc  -- get LOB handle
       FROM CONTENT_TABLE
       WHERE id = v_id;
     offset:=offset+(pos-1)*2000;
      dbms_lob.read(lobloc,amount,offset,buffer);
      
     --read 2000 varchar2 from the buffer
     return buffer;
EXCEPTION
        WHEN NO_DATA_FOUND THEN
     return buffer;
END;

解决方案 »

  1.   

    把引进oracle.sql.CLOB jar包(也就是常用的class12.jar)文件用winrar打开,然后删除oracle目录即可解决,只能删除运行环境中的jar包,开发环境就不要这么做了
      

  2.   

    写入Blob/Clob字段和写入其它类型字段的方式非常不同,因为Blob/Clob自身有一个cursor,必须使用cursor对Blob/Clob进行操作,因而在写入Blob/Clob之前,必须获得cursor才能进行写入,那就需要先插入一个empty的Blob/Clob,这将创建一个Blob/Clob的cursor,然后再把这个empty的Blob/Clob的cursor用select查询出来,这样通过两步操作,就获得了Blob/Clob的cursor,可以真正的写入Blob/Clob数据了。这种方式比较麻烦,读写都要增加不少工作量
      

  3.   

    to:wangdongzjk(东)能否把你用的代码贴出来
    谢谢!
      

  4.   

    http://community.csdn.net/Expert/TopicView3.asp?id=4320399 我以前的帖子
      

  5.   

    http://community.csdn.net/Expert/topic/4320/4320399.xml
      

  6.   

    我没有用hibernate,直接用的jdbc
    oracle.sql.CLOB clob =oracle.sql.CLOB.createTemporary(con, false,oracle.sql.CLOB.DURATION_CALL);
    clob.putString(1,content);
    ps.setClob(1,clob);
    ps.executeUpdate();
    报错java.sql.SQLException: Io 异常: End of TNS data channel这个要怎么解决?
    谢谢!