这个存储过程主要是想实现输入两个参数:
开始时间、结束时间(精确到日)
那么经过存储过程的运算,能最终得到一个从开始时间
到结束时间之间所有日期的结果集出来。
比如,
输入 2008-08-08 , 2008-08-12
那么,
结果应该是
DATE
-------
2008-08-09
2008-08-10
2008-08-11望高手指点迷津!给些思路。

解决方案 »

  1.   

    某位高手的,我收藏了
    with t as (
        select to_date('2008-08-08') d from dual 
        union 
        select to_date('2008-08-12')  from dual 

    select t0.d 
        from (select d start_d ,lead(d,1,d+1) over (order by d) end_d from t) t, 
            (select r+min_d d 
                  from (select min(d) min_d from t), 
                      (select rownum-1 r 
                            from all_objects 
                            where rownum <=(select (max(trunc(d))-min(trunc(d))+1) from t)) ) t0 
        where t0.d>t.start_d and t0.d <t.end_d 
        order by 1;
      

  2.   

    SQL> select to_date('20080312','yyyymmdd')+rownum from dual
      2  connect by  rownum<=to_date('20080315','yyyymmdd')-to_date('20080312','yyyymmdd')
      3  /
     
    TO_DATE('20080312','YYYYMMDD')
    ------------------------------
    2008/3/13
    2008/3/14
    2008/3/15
     
    SQL> 僅供參考!
      

  3.   

    为什么fxianxian 的SQL 只能出100行记录,如果查询范围大,就不能得到全部结果了???
      

  4.   

    不会的,原因应该是你使用了一个限制行输出的工具连接oracle。
    你试试在sqlplus下执行。
      

  5.   


    很早就看过这个语句,但一直不清楚connect by为什么会产生这种效果?
      

  6.   

    多谢大家的指点,fxianxian 的方法不错,我理解了那段SQL的思路,谢谢!