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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
DROP TABLE TEST_T1;
DROP TABLE TEST_T2;
CREATE TABLE TEST_T1
AS
SELECT 1 AS ID_EVE,TO_DATE('10/09/2011','DD/MM/YYYY') AS DATE_DEBUT_EV, TO_DATE('23/09/2011','DD/MM/YYYY') AS DATE_FIN_EV FROM DUAL UNION ALL
SELECT 2 AS ID_EVE,TO_DATE('01/07/2011','DD/MM/YYYY') AS DATE_DEBUT_EV, TO_DATE('30/07/2011','DD/MM/YYYY') AS DATE_FIN_EV FROM DUAL
;
CREATE TABLE TEST_T2
AS
SELECT 1 AS ID_EVE, TO_DATE('15/09/2011','DD/MM/YYYY') AS DATE_DEBUT_PAUSE, TO_DATE('16/09/2011','DD/MM/YYYY') AS DATE_FIN_PAUSE FROM DUAL UNION ALL
SELECT 1 AS ID_EVE, TO_DATE('18/09/2011','DD/MM/YYYY') AS DATE_DEBUT_PAUSE, TO_DATE('20/09/2011','DD/MM/YYYY') AS DATE_FIN_PAUSE FROM DUAL UNION ALL
SELECT 1 AS ID_EVE, TO_DATE('21/09/2011','DD/MM/YYYY') AS DATE_DEBUT_PAUSE, TO_DATE('22/09/2011','DD/MM/YYYY') AS DATE_FIN_PAUSE FROM DUAL UNION ALL
SELECT 2 AS ID_EVE, TO_DATE('15/07/2011','DD/MM/YYYY') AS DATE_DEBUT_PAUSE, TO_DATE('18/09/2011','DD/MM/YYYY') AS DATE_FIN_PAUSE FROM DUAL UNION ALL
SELECT 2 AS ID_EVE, TO_DATE('20/07/2011','DD/MM/YYYY') AS DATE_DEBUT_PAUSE, TO_DATE('23/09/2011','DD/MM/YYYY') AS DATE_FIN_PAUSE FROM DUAL UNION ALL
SELECT 2 AS ID_EVE, TO_DATE('25/07/2011','DD/MM/YYYY') AS DATE_DEBUT_PAUSE, TO_DATE('27/09/2011','DD/MM/YYYY') AS DATE_FIN_PAUSE FROM DUAL
;
DECLARE
CURSOR c_TEST_T1 IS
SELECT *
FROM TEST_T1;
CURSOR c_TEST_T2(l_id_eve NUMBER) IS
SELECT *
FROM TEST_T2
WHERE TEST_T2.id_eve = l_id_eve
ORDER BY DATE_DEBUT_PAUSE
;
TYPE r_periodes IS RECORD ( ID_EVE TEST_T1.ID_EVE%TYPE
, DT_DEB_ACTIVITE DATE
, DT_FIN_ACTIVITE DATE
);
TYPE t_periodes IS TABLE OF r_periodes INDEX BY BINARY_INTEGER;
l_periodes t_periodes;
BEGIN
l_periodes.DELETE;
FOR l_TEST_T1 IN c_TEST_T1
LOOP
l_periodes(l_periodes.COUNT+1).id_eve := l_TEST_T1.id_eve;
l_periodes(l_periodes.COUNT).DT_DEB_ACTIVITE := l_TEST_T1.DATE_DEBUT_EV;
FOR l_TEST_T2 IN c_TEST_T2(l_TEST_T1.id_eve)
LOOP
l_periodes(l_periodes.COUNT).DT_FIN_ACTIVITE := l_TEST_T2.DATE_DEBUT_PAUSE;
l_periodes(l_periodes.COUNT+1).id_eve := l_TEST_T1.id_eve;
l_periodes(l_periodes.COUNT).DT_DEB_ACTIVITE := l_TEST_T2.DATE_FIN_PAUSE;
END LOOP;
l_periodes(l_periodes.COUNT).DT_FIN_ACTIVITE := l_TEST_T1.DATE_FIN_EV;
END LOOP;
FOR i in l_periodes.FIRST .. l_periodes.LAST
LOOP
DBMS_OUTPUT.PUT_LINE (l_periodes(i).id_eve
|| '-'
|| l_periodes(i).DT_DEB_ACTIVITE
|| '-'
||l_periodes(i).DT_FIN_ACTIVITE );
END LOOP;
END;
/
1-10/09/11-15/09/11
1-16/09/11-18/09/11
1-20/09/11-21/09/11
1-22/09/11-23/09/11
2-01/07/11-15/07/11
2-18/09/11-20/07/11
2-23/09/11-25/07/11
2-27/09/11-30/07/11 |
Partager