建一个这样的表
create table test_date
(
  
  v1 varchar2(40),
  v2 varchar2(40),
  v3 varchar2(40),
  v4 varchar2(40),
  v5 varchar2(40),
  v6 varchar2(40),
  v7 varchar2(40),
  v8 varchar2(40),
  v9 varchar2(40)
);要求写一个存储过程  往这个测试表中插入数据
从2007年1月1日到2008年1月17日
循环插入V1             V2     V3 V4(季度) V5(一年中的第几周) V6(星期几) V7(是否周六日) V8(上一月) V9(本月最后一天)
2007年01月01日 200701 01 1          1                        1           0              200612      20070131
2007年01月02日 200701 01 1          1                        2           0              200612      20070131
2007年01月03日 200701 01 1          1                        3           0              200612      20070131
2007年01月04日 200701 01 1          1                        4           0              200612      20070131
2007年01月05日 200701 01 1          1                        5           0              200612      20070131
2007年01月06日 200701 01 1          1                        6           1              200612      20070131
2007年01月07日 200701 01 1          1                        7           1              200612      20070131
2007年01月08日 200701 01 1          2                        1           0              200612      20070131
      

解决方案 »

  1.   

    create   table   test_date 
    (   
        v1   varchar2(40), 
        v2   varchar2(40), 
        v3   varchar2(40), 
        v4   varchar2(40), 
        v5   varchar2(40), 
        v6   varchar2(40), 
        v7   varchar2(40), 
        v8   varchar2(40), 
        v9   varchar2(40) 
    ); declare d_curDate date;
    begin
    d_curDate := to_date('20070101','yyyymmdd');
    for i in 0..to_date('20080117','yyyymmdd')-to_date('20070101','yyyymmdd') loop
    insert into test_date
    select 
    to_char(d_curDate+i,'YYYY')||'年'||to_char(d_curDate+i,'MM')||'月'||to_char(d_curDate+i,'DD')||'日' V1
    ,to_char(d_curDate+i,'YYYYMM') V2
    ,to_char(d_curDate+i,'DD') V3
    ,to_char(d_curDate+i,'Q') V4季度
    ,to_char(d_curDate+i,'WW') V5一年中的第几周
    ,to_char(d_curDate+i,'D') V6星期几
    ,decode(to_char(d_curDate+i,'D'),'6',1,'7',1,0) V7是否周六日
    ,to_char(add_months(d_curDate+i,-1),'YYYYMM') V8上一月
    ,to_char(last_day(d_curDate+i),'YYYYMMDD') V9本月最后一天
    from dual;
    end loop;
    end;select * From test_date;      V1          V2    V3     V4       V5     V6      V7         V8       V9
    2007年01月01日 200701 01 1 01 2 0 200612 20070131
    2007年01月02日 200701 02 1 01 3 0 200612 20070131
    2007年01月03日 200701 03 1 01 4 0 200612 20070131
    2007年01月04日 200701 04 1 01 5 0 200612 20070131
    2007年01月05日 200701 05 1 01 6 1 200612 20070131
    2007年01月06日 200701 06 1 01 7 1 200612 20070131
    2007年01月07日 200701 07 1 01 1 0 200612 20070131
    ................................................................................
    2008年01月11日 200801 11 1 02 6 1 200712 20080131
    2008年01月12日 200801 12 1 02 7 1 200712 20080131
    2008年01月13日 200801 13 1 02 1 0 200712 20080131
    2008年01月14日 200801 14 1 02 2 0 200712 20080131
    2008年01月15日 200801 15 1 03 3 0 200712 20080131
    2008年01月16日 200801 16 1 03 4 0 200712 20080131
    2008年01月17日 200801 17 1 03 5 0 200712 20080131
      

  2.   

    没事写了一个笨的SQL> create table test_date
      2  (
      3      v1   varchar2(40),
      4      v2   varchar2(40),
      5      v3   varchar2(40),
      6      v4   varchar2(40),
      7      v5   varchar2(40),
      8      v6   varchar2(40),
      9      v7   varchar2(40),
     10      v8   varchar2(40),
     11      v9   varchar2(40)
     12  );Table createdSQL> create or replace function getQuarter(indate date) return int
      2  is
      3    mth int;
      4    quarter int;
      5  begin
      6    select to_number(to_char(indate,'mm')) into mth from dual;
      7    if mth<=3 then
      8      quarter := 1;
      9    elsif mth<=6 then
     10      quarter := 2;
     11    elsif mth<=9 then
     12      quarter := 3;
     13    elsif mth<=12 then
     14      quarter := 4;
     15    end if;
     16    return quarter;
     17  end;
     18  /Function createdSQL> create or replace procedure test_display_date(datefrom date,dateto date)
      2  as
      3    cnt number;
      4    curdate date;
      5  begin
      6    curdate := datefrom;
      7    select floor(dateto-datefrom) into cnt from dual;
      8    dbms_output.put_line(cnt);
      9    for i in 1..cnt
     10    loop
     11      insert into test_date
     12      select to_char(curdate,'yyyy-mm-dd'),to_char(curdate,'yyyymm'),to_char(curdate,'dd'),getQuarter(curdate),
     13             to_char(curdate+10,'IW'),to_char(curdate,'dy'),decode(to_char(curdate,'dy'),'sat',1,'sun',1,0),
     14             to_char(add_months(curdate,-1),'yyyymm'),to_char(last_day(curdate),'yyyy-mm-dd') from dual;
     15      curdate := curdate+1;
     16    end loop;
     17  end;
     18  /Procedure createdSQL> execute test_display_date(to_date('2007-12-28','yyyy-mm-dd'),to_date('2008-01-6','yyyy-mm-dd'));9PL/SQL procedure successfully completedSQL> select * from test_date;V1                                       V2                                       V3                                       V4                                       V5                                       V6                                       V7                                       V8                                       V9
    ---------------------------------------- ---------------------------------------- ---------------------------------------- ---------------------------------------- ---------------------------------------- ---------------------------------------- ---------------------------------------- ---------------------------------------- ----------------------------------------
    2007-12-28                               200712                                   28                                       4                                        02                                       fri                                      0                                        200711                                   2007-12-31
    2007-12-29                               200712                                   29                                       4                                        02                                       sat                                      1                                        200711                                   2007-12-31
    2007-12-30                               200712                                   30                                       4                                        02                                       sun                                      1                                        200711                                   2007-12-31
    2007-12-31                               200712                                   31                                       4                                        02                                       mon                                      0                                        200711                                   2007-12-31
    2008-01-01                               200801                                   01                                       1                                        02                                       tue                                      0                                        200712                                   2008-01-31
    2008-01-02                               200801                                   02                                       1                                        02                                       wed                                      0                                        200712                                   2008-01-31
    2008-01-03                               200801                                   03                                       1                                        02                                       thu                                      0                                        200712                                   2008-01-31
    2008-01-04                               200801                                   04                                       1                                        03                                       fri                                      0                                        200712                                   2008-01-31
    2008-01-05                               200801                                   05                                       1                                        03                                       sat                                      1                                        200712                                   2008-01-31
      

  3.   

    看了楼上的,我的函数多余了,有to_char(sysdate,'Q')真好!