select '2001' d from dual union all
select '2002' d from dual union all
select '2003' d from dual union all
select '2006' d from dual union all
select '2007' d from dual union all
select '2008' d from dual)
SELECT SS
FROM (SELECT SN + (level - 1) SS
FROM (select min(d) SN,max(d) EN from tab) T
CONNECT BY SN + (level - 1) <= EN)
WHERE SS NOT IN (SELECT d FROM tab)
with t as (
select '2001-10-1' d from dual union all
select '2001-10-2' d from dual union all
select '2001-10-3' d from dual union all
select '2002-11-1' d from dual union all
select '2002-11-3' d from dual union all
select '2006-1-2' d from dual union all
select '2007-2-1' d from dual union all
select '2008-11-1' d from dual)
SELECT NY || '-' || RM
FROM (SELECT DISTINCT REGEXP_SUBSTR(D, '[[:alnum:]]+', 1, 1) || '-' ||
REGEXP_SUBSTR(D, '[[:alnum:]]+', 1, 2) NY
FROM T),
(SELECT ROWNUM RM FROM DUAL CONNECT BY ROWNUM <= 3)
WHERE NOT EXISTS (SELECT 1 FROM T WHERE T.D = NY || '-' || RM)
ORDER BY NY, RM