select NVL(SUM((to_date('2009-03-27', 'yyyy-mm-dd') - T_EDR_BGN_TM + 1) /
               (T_INSRNC_END_TM - T_EDR_BGN_TM + 1) * NVL(N_PRM_VAR2, 0)),
           0) vegcp
  from t_Acceptsech_Pi t
 where C_DPT_CDE like '9%'
   AND TO_CHAR(T_INSRNC_BGN_TM, 'YYYY-MM-DD') >= '2009-01-01'
   AND TO_CHAR(T_INSRNC_BGN_TM, 'YYYY-MM-DD') <= '2009-03-27'
   and TO_CHAR(T_INSRNC_END_TM, 'YYYY-MM-DD') > '2009-01-01'
   and TO_CHAR(T_EDR_BGN_TM, 'YYYY-MM-DD') < '2009-03-27'
   and t.c_eng_no in
       (select distinct (c_eng_no)
          from t_acceptsech_pi
         where C_DPT_CDE like '9%'
           AND TO_CHAR(T_INSRNC_BGN_TM, 'YYYY-MM-DD') >= '2008-01-01'
           AND TO_CHAR(T_INSRNC_BGN_TM, 'YYYY-MM-DD') <= '2008-03-27'
           and c_vhl_frm in
               (select c_vhl_frm
                  from t_acceptsech_pi
                 where C_DPT_CDE like '9%'
                   AND TO_CHAR(T_INSRNC_BGN_TM, 'YYYY-MM-DD') >= '2008-01-01'
                   AND TO_CHAR(T_INSRNC_BGN_TM, 'YYYY-MM-DD') <= '2008-03-27'))
   and (C_EDR_TYPE = '1' or C_EDR_TYPE = '3');

解决方案 »

  1.   

    将这个sql建个视图,然后再按你说的两种方式试试
      

  2.   

    存储过程中不能直接用SELECT 
      

  3.   

    我用的远程数据库服务器
    直接用PLSQL调试存过就调试不通
    但是把存过的SQL抓出来把条件换上就能执行
      

  4.   

    存储过程中除非是游标要么跟INTO,否则不能直接SELECT
      

  5.   

    如果select出的记录数很大的话,楼主的现象是正常现象。
    如果select出的记录数很少,则要考虑网络传输速度了
      

  6.   

    数据量不是很大,几万条的样子,但是如果是数据量的问题为什么在sql里面可以较快的执行,但是在存过里面就不行了呢
    我的单步到存过里面看的,就是这条一直在run
      

  7.   

    我把第一个in用exists就能run通了,不知道为什么。
    就算效率高点,也不至于这样吧。估计还是其他什么地方我没考虑到
    继续等强人的圆满解决方案
      

  8.   

    那可能就是你SQL效率的问题了~要调优
      

  9.   

    explan sql
    看看有什麼資訊
    查看access path..等等