建一个这样的表
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
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
(
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 (
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