如题, 谢谢!

解决方案 »

  1.   

    create or replace procedure P_T_LCD_RAWMATERIAL_WEEKREPORT
    (
      T_YEAR  IN  VARCHAR2
    )
    AS
    T_CNT INT;
    T_WEEKDATES DATE;--周的开始时间
    T_WEEKDATEE DATE;--周的结束时间
    T_MONTHDAYS VARCHAR2(10);--年月日字符串格式如:2008.12.26
    T_MONTHDAYE VARCHAR2(10);--年月日字符串格式如:2009.01.01
    T_DAY  DATE;
    T_CURRENT_YEAR VARCHAR(10);--当前年
    --T_CURRENT_WEEKDATES DATE;--当前周的开始时间
    T_CURRENT_WEEKDATEE DATE;--当前周的结开时间 
    BEGIN
         T_CURRENT_YEAR:= substr(to_char(sysdate,'yyyyMMdd'),1,4);--取当前年如2009
         for I IN 1..53 loop
          if T_DAY is null then --若T_DAY 为空则开始执行第一周数据统计,否则执行下一周的统计
           T_DAY:=to_date(T_YEAR||'0101','yyyy-MM-dd');
          else
           T_DAY:=T_WEEKDATEE+1;
          end if;
         T_WEEKDATES:=getweeksdate(T_DAY);--取周的开始时间
         T_WEEKDATEE:=getweekedate(T_DAY);--取周的结束时间
         if(T_CURRENT_YEAR=T_YEAR) then --判断是否是当前年,若是统计到当周即可
           --T_CURRENT_WEEKDATES:=getweeksdate(sysdate);--取当前周的开始时间
           T_CURRENT_WEEKDATEE:=getweekedate(sysdate);--取当前周的结束时间
           if(T_WEEKDATEE>=T_CURRENT_WEEKDATEE+7) then
               return;
          end if;
         end if;
         p_t_lcd_rawmaterial_weekqty(T_WEEKDATES,T_WEEKDATEE,I,T_YEAR);--执行统计本周相关的数据
         DBMS_OUTPUT.put_line(T_MONTHDAYS);
         dbms_output.put_line(T_MONTHDAYE);
              
         end loop;     
         commit;
       exception --处理异常情况
          when others then 
          rollback;
          raise;
          END;
      

  2.   

    /****取周的开始时间*****/
    create or replace function GetWeekSDate
    (
      V_Date       Date
    )
    return Date
    as
      V_Result     Date;
    begin
      select trunc(next_day(V_Date-7,6)) into V_Result from T_CO_MODEL where rownum=1;
      return V_Result;
    end;/****取周的结束时间*****/
    create or replace function GetWeekEDate
    (
      V_Date       Date
    )
    return Date
    as
      V_Result     Date;
    begin
      select trunc(next_day(V_Date-7,6)+7)-1/(24*60*60) into V_Result from DUAL;
      return V_Result;
    end;