CREATE OR REPLACE PROCEDURE DIVIDE_BY_MON_DAY(START_DATE IN DATE,
END_DATE IN DATE) IS
BEGIN
FOR D IN (SELECT START_DATE + (LEVEL - 1) CUR_DATE
FROM DUAL
CONNECT BY LEVEL <= END_DATE - START_DATE) LOOP
DBMS_OUTPUT.PUT_LINE(D.CUR_DATE);
DBMS_OUTPUT.PUT_LINE(D.CUR_DATE + 1);
DBMS_OUTPUT.PUT_LINE('------------------------------');
END LOOP;
FOR M IN (SELECT ADD_MONTHS(TRUNC(START_DATE, 'mm'), (LEVEL - 1)) CUR_MON
FROM DUAL
CONNECT BY LEVEL <= MONTHS_BETWEEN(END_DATE, START_DATE)) LOOP
DBMS_OUTPUT.PUT_LINE(M.CUR_MON);
DBMS_OUTPUT.PUT_LINE(ADD_MONTHS(M.CUR_MON, 1));
DBMS_OUTPUT.PUT_LINE('------------------------------');
END LOOP;
END DIVIDE_BY_MON_DAY;