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;
/****取周的开始时间*****/ 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;
(
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;
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;