SQL> select to_date('2003-01','yyyy-mm')+num-1 from(select rownum num from all_tables where rownum<3
2);TO_DATE('2003-01','
-------------------
2003-01-01 00:00:00
2003-01-02 00:00:00
2003-01-03 00:00:00
2003-01-04 00:00:00
2003-01-05 00:00:00
2003-01-06 00:00:00
2003-01-07 00:00:00
2003-01-08 00:00:00
2003-01-09 00:00:00
2003-01-10 00:00:00
2003-01-11 00:00:00
2003-01-12 00:00:00
2003-01-13 00:00:00
2003-01-14 00:00:00
2003-01-15 00:00:00
2003-01-16 00:00:00
2003-01-17 00:00:00
2003-01-18 00:00:00
2003-01-19 00:00:00
2003-01-20 00:00:00
2003-01-21 00:00:00TO_DATE('2003-01','
-------------------
2003-01-22 00:00:00
2003-01-23 00:00:00
2003-01-24 00:00:00
2003-01-25 00:00:00
2003-01-26 00:00:00
2003-01-27 00:00:00
2003-01-28 00:00:00
2003-01-29 00:00:00
2003-01-30 00:00:00
2003-01-31 00:00:00已选择31行。SQL>

解决方案 »

  1.   

    SQL> set serveroutput on
    SQL> declare
      2  a date;
      3  num number;
      4  begin
      5  a:=trunc(sysdate,'mm');
      6  num:=trunc(add_months(sysdate,1),'dd')-1-trunc(sysdate,'dd');
      7  for i in 1..num loop
      8  dbms_output.put_line(to_char(a,'yyyy-mm-dd'));
      9  a:=a+1;
     10  end loop;
     11  end;
     12  /
    2003-01-01
    2003-01-02
    2003-01-03
    2003-01-04
    2003-01-05
    2003-01-06
    2003-01-07
    2003-01-08
    2003-01-09
    2003-01-10
    2003-01-11
    2003-01-12
    2003-01-13
    2003-01-14
    2003-01-15
    2003-01-16
    2003-01-17
    2003-01-18
    2003-01-19
    2003-01-20
    2003-01-21
    2003-01-22
    2003-01-23
    2003-01-24
    2003-01-25
    2003-01-26
    2003-01-27
    2003-01-28
    2003-01-29
    2003-01-30PL/SQL procedure successfully completed
      

  2.   

    笔语
    num:=trunc(add_months(sysdate,1),'dd')-trunc(sysdate,'dd');
      

  3.   

    num:=trunc(add_months(sysdate,1),'dd')-1-trunc(sysdate,'dd');
    多减了一个1,应为:  
    num:=trunc(add_months(sysdate,1),'dd')-trunc(sysdate,'dd');