1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| PROCEDURE P_SEMAINE (p_semaine IN NUMBER, p_annee IN NUMBER,
p_datedeb OUT DATE, p_datefin OUT DATE)
IS
-- p_semaine : n° semaine ISO
-- p_annee : Année
-- p_datedeb : Date du premier jour de la semaine
-- p_datefin : Date du dernier jour de la semaine
v_debannee DATE := TRUNC(TO_DATE(p_annee, 'YYYY'), 'YYYY');
BEGIN
IF p_semaine IS NOT NULL
THEN
IF v_debannee IS NULL
THEN v_debannee := TRUNC(SYSDATE, 'YYYY');
END IF;
-- Cas normal (1er jour = LMMJ = Première Semaine)
-- Sinon on rajoute 3 jour (VSD => LMMJ (Premiere semaine commence au lundi suivant))
SELECT TRUNC(v_debannee + DECODE( TO_NUMBER(TO_CHAR(v_debannee, 'IW')), 1, 0, 3)
,'IW') + (p_semaine-1)*7 AS deb,
TRUNC(v_debannee + DECODE( TO_NUMBER(TO_CHAR(v_debannee, 'IW')), 1, 0, 3)
,'IW') + p_semaine * 7 - 1 AS fin
INTO p_datedeb, p_datefin
FROM DUAL;
END IF;
END; |
Partager