Oracle一个包里的函数,前几天速度还好,好像也没有改动什么,今天速度变的很慢,我调试进去看,
当执行完游标c1,把c1赋给变量%rowtype,fetch的时候速度很慢,不知道是什么原因,测试时,c1里面只有1条记录,而且查询速度也快。请大家帮忙解决

解决方案 »

  1.   

    cursor c1(v_mcode varchar2, v_ifchk varchar2) is
          select *
            from a
           where (a.mrlmcode = v_mcode or v_mcode is null) and
                 a.mrlrdate>=to_date(P_SDATE, 'yyyymmdd')
             and a.mrlifchk = v_ifchk
           order by a.mrlrdate;     view_mrl meterread_lkg%rowtype;
         open c1(P_MICODE, P_ISCHK);
          loop
            fetch c1 into view_mrl;
      

  2.   

    查询用的字段上建索引了么?
    sql满简单的
      

  3.   

    单独执行SQL速度如何,还有sql中的排序有什么意义?
      

  4.   

    fetch慢
    1.查询慢
    不知道你的表数据量,注意你的查询用到了a表的3个字段,如果已经全部建立了单个字段的索引,应该用and_equal提示将3个索引连起来,或者建立复合索引。
    select /*+and_equal(a,idx_mrlmcode,idx_mrlrdate,idx_mrlifchk)*/*
            from a
           where (a.mrlmcode = v_mcode or v_mcode is null) and
                 a.mrlrdate>=to_date(P_SDATE, 'yyyymmdd')
             and a.mrlifchk = v_ifchk
           order by a.mrlrdate;
    2.你要插入的表有某些字段上的约束存在问题,可以先去掉要插入表的主键,索引再尝试执行该过程。
      

  5.   

    select /*+and_equal(a,idx_mrlmcode,idx_mrlrdate,idx_mrlifchk)*/*
            from a
           where (a.mrlmcode = v_mcode or v_mcode is null) and
                 a.mrlrdate>=to_date(P_SDATE, 'yyyymmdd')
             and a.mrlifchk = v_ifchk
           order by a.mrlrdate; 
    --1、游标所使用的sql语句查询时间为多长?2、游标有没有退出的语句
    exit when cur%notfound;
      

  6.   

     or v_mcode is null
    使索引无效了