还有就是我的程序一用order by 语句就会很慢。有时tomcat还会死

解决方案 »

  1.   

    用order by 语句就会很慢
    -->可以理解,可能是sort在硬盘上了但是出错无法理解
      

  2.   

    这是getclobnew的函数
         lobloc  clob;
         buffer  varchar2(32767);
         amount  number := 30000;//如果这里写的是3000以下。加不加order by 都不会出错
         offset  number := 1;
         query_str  varchar2(1000);
    begin
       dbms_lob.read(lobloc,amount,offset,buffer);
       return buffer;
    exception
        when no_data_found then
       return buffer;
    varchar2最大支持多长。还有就是是不是数据库配置的问题。什么地方分配的内存小了。
      

  3.   

    varchar2如果是字段,可支持2000字节,如果是存储过程或函数参数,可以支持4000个字节至于排序,可以把init.ora中的sort_area_size设置大一些
      

  4.   

    可以把init.ora中的sort_area_size设置大一些我加了一倍。
    改这个东西是不是要重启数据库啊。
    存储过程或函数参数,最多只支持4000个字节吗?
    buffer  varchar2(32767);
    那我这够话怎么不会出错啊。
      

  5.   

    varchar2如果是字段,可支持4000字节,是参数,可支持32767
      

  6.   

    study and help you up
      

  7.   

    关于order by慢:
    Order by语句对要排序的列没有什么特别的限制,也可以将函数加入列中(象联接或者附加等)。任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。
    仔细检查order by语句以找出非索引项或者表达式,它们会降低性能。解决这个问题的办法就是重写order by语句以使用索引,也可以为所使用的列建立另外一个索引,同时应绝对避免在order by子句中使用表达式。
      

  8.   

    當SORT AREA用完後就會開始寫入TEMP TABLESPACE,
    這速度至少有數百倍之差,其他的就是上面說的了
      

  9.   

    没有order by正常,有order by出错,还很慢,没有遇到,搞不懂
      

  10.   

    dbms_lob.read(lobloc,amount,offset,buffer);
    我测试发现如果lobloc这个字段要是太大。像超过10000字节。就会出错。
    错误是: 字符串缓冲区太小 ORA-06512
    但我的buffer明明是32767。还是没有搞清楚。
    希望大家来看看
      

  11.   

    dbms_lob.read(lobloc,amount,offset,buffer);
    我想他是没错误的。
    那个错误: 字符串缓冲区太小 ORA-06512
    是不是说我在select 语句中的字符串缓冲区太小。
    也就是说select语句不能查询超过多少的字节的字符串啊。
    可不可以在什么地方设置select语句支持的最大字节数啊。
    大家再不回答。我也发不了回复了。
    顶一下也可以。