Isso pode ser feito com uma simples subconsulta que conta o número de datas de feriados entre uma data especificada e data+5. O seguinte retornará uma data que é cinco dias não feriados no futuro:
testdate+(select 5+count(1)
from holiday
where holidaydate between testdate
and testdate + 5)
Basta alterar os dois "5"s para outro número para alterar o período de avaliação.
SQLFiddle aqui
Editar - com base no comentário abaixo, meu código não avalia nenhum dia após o quinto dia. Isso provavelmente seria muito mais fácil com uma função, mas o seguinte código baseado em cte também funcionará:
with cte as ( (select alldate,holidaydate
from (select to_date('20130101','yyyymmdd')+level alldate
from dual
connect by level < 10000 -- adjust for period to evaluate
) alldates
left join holiday on alldate=holidaydate) )
select
testdate,test_plus_five
from (
select
alldate test_plus_five,testdate,
sum(case when holidaydate is null
then 1
else 0 end) over (partition by testdate order by alldate) lastday
from
cte,
testdates
where
alldate >= testdate
group by
alldate,holidaydate,testdate)
where
lastday = 6
Este script constrói uma tabela de calendário para poder avaliar cada dia (feriado ou não); em seguida, obtemos uma contagem contínua de dias sem feriados e usamos o sexto.
SQLFiddle aqui