declare
year varchar2(10) := nvl(:P34_D_F_BUY,to_char(sysdate,'yyyy')); week number; min_week number := 01; num number := 1; v_str varchar2(5000) := ''; begin-- 获取该年的最大周数
WITH PARAMS AS (SELECT year AS NF FROM DUAL) SELECT TO_CHAR(TO_DATE(PM.NF || '-12-28','YYYY-MM-DD'),'IW') into week FROM DUAL LEFT JOIN PARAMS PM ON 1=1; while min_week <= week loop -- DBMS_OUTPUT.PUT_LINE(min_week ); if num > 1 then v_str := v_str || ','; end if ; v_str := v_str || min_week ; min_week := min_week +1; num := num + 1; end loop; v_str := 'regexp_substr(''' || v_str || ''',''[^,]+'',1,LEVEL)'; return ('select ' || v_str || ' t,'|| v_str ||'v from dual CONNECT BY LEVEL < ' || num );end