求一非常简单存储过程

碧水幽幽泉 2009-12-13 10:03:43

现有表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.



...全文
152 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼W 2009-12-14
  • 打赏
  • 举报
回复
要写成存储过程的话,唯一的理由就是l_date不固定
这里写成过程实际上效率更低,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
碧水幽幽泉 2009-12-13
  • 打赏
  • 举报
回复
非常感谢楼上各位!
问题解决了!
我用的是存储过程!


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;
huminghua 2009-12-13
  • 打赏
  • 举报
回复
select 语句就好了啊!
烟雨鹏城 2009-12-13
  • 打赏
  • 举报
回复
写个触发器完成
小灰狼W 2009-12-13
  • 打赏
  • 举报
回复
select date'2010-1-1'+rownum-1 rq,
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'
ACMAIN_CHM 2009-12-13
  • 打赏
  • 举报
回复
没必要用存储过程。

我是直接在EXCEL中把数据准备好,A列日期,B列wkType,利用EXCEL中的 weekday函数得到周几。 然后把法定假更新进去,以及受法定假影响的周末。

EXCEL数据完成后,在C列生成公式 insert into 表A values (" &a1&"," &b2&");") 之类的,需要用一下to_date
然后一次性复制到sqlplus 中搞定。

17,378

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧