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

解决方案 »

  1.   

    没必要用存储过程。我是直接在EXCEL中把数据准备好,A列日期,B列wkType,利用EXCEL中的 weekday函数得到周几。 然后把法定假更新进去,以及受法定假影响的周末。EXCEL数据完成后,在C列生成公式 insert into 表A values (" &a1&"," &b2&");") 之类的,需要用一下to_date
    然后一次性复制到sqlplus 中搞定。
      

  2.   

    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'
      

  3.   

    非常感谢楼上各位!
       问题解决了!
     我用的是存储过程!
    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;
      

  4.   

    要写成存储过程的话,唯一的理由就是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