现有表A: 2个字段为:wdate date primary key,wkType number 现要往A表中插入数据,插入的同时需要更加日期的星期数,来决定wkType 的取值 0-表示工作日(周一至周五); 1-表示(周末)周六或周日
例如:
2010-01-01 是星期五 则wkType = 0;
2010-01-02 是星期六 则wkType = 1;
2010-01-03 是星期六 则wkType = 1;
2010-01-04 是星期六 则wkType = 0; 效果如下:
wdate wkType 2010-01-01 0
2010-01-02 1
2010-01-03 1
2010-01-04 0
由于数据较多达365条!现在需要一个存储过程来插,过程传入的参数为: wdate in date.
然后一次性复制到sqlplus 中搞定。
to_char(date'2010-1-1'+rownum-1,'day')day,
decode(to_char(date'2010-1-1'+rownum-1,'d'),'1',1,'7',1,0)wktype
from all_objects
where rownum<=date'2011-1-1'-date'2010-1-1'
问题解决了!
我用的是存储过程!
create or replace procedure p_workCalendar_query
is
l_date date;
l_wkType number;
begin l_date := to_date('2010-01-01','yyyy-mm-dd');
for i in 0..364 loop
select decode((select to_char(l_date+i,'day') from dual),'星期六',1,'星期日',1,0)
into l_wkType
from dual; insert into workCalendar
(
wdate,
wkType
)
values (
l_date+i,
l_wkType
); end loop;
commit;
end;
这里写成过程实际上效率更低,365条记录是非常少的,不需要用过程来处理。
insert into workCalendar
select date'2010-1-1'+rownum-1,
decode(to_char(date'2010-1-1'+rownum-1,'d'),'1',1,'7',1,0)
from dual
connect by rownum <=date'2011-1-1'-date'2010-1-1'
即可
如果数据库版本为10g以下,将from dual connect by改成
from all_objects where