同样的sql
insert /*+ append */ into t_test1
select bb.bankaccount, wm_concat(deviceno) as devicelist
  from (select aa.bankaccount, substr(aa.deviceno, -4, 4) as deviceno
          from (select si.bankaccount,
                       si.deviceno,
                       row_number() over(partition by si.bankaccount order by si.subscriberid) as seq
                  from t_proc_invbl_subinfo si
                 where si.devicenum >= 2
                   and si.publicaccountflag = '01'
                   and si.customerprops = '01') aa
         where aa.seq <= 12) bb
 group by bb.bankaccount;放在pl/sql里运行,1分钟搞定;
在存储过程里运行,十几分钟还没有跑完
到底是怎么回事情呢
期待您的回复!

解决方案 »

  1.   

    还有其他的
    但是这个地方老是运行慢
    其他的则跑得正常
    因此我怀疑是这个地方出了问题
    btw:数据量也就几十万有个类似的帖子
    http://topic.csdn.net/u/20100911/14/aaf864e7-02e4-4af4-b1c3-1bbdd1cebef8.html
    可惜没有看到最终的解决方案,有点郁闷
      

  2.   

    做个statpack报告看看

    statspack.snap
    然后运行你的存储过程
    statspack.snap
    通过前后的snap做个报告,分析下就可以了。。
      

  3.   

    存储过程中的执行计划可能不同于外面的执行计划
    如果基于cost的优化,重新生成一下统计数据再试
      

  4.   

    可以告诉我这是为什么吗?
    如果这个sql在外面执行难道不是根据统计数据执行的吗?能举个例子不?
      

  5.   

    不管了
    结贴
    btw:
    测试了下
    发现这个wm_concat确实影响性能,主要实在存储过程里。
    在外面还好。
    用集合的方式还是蛮快的。