Retirei a função abaixo de um topico do forum, no entanto, a mesma não verifica a questão de horas.
Exemplo:
declare
vtemp number;
vdata1 date;
vdata2 date;
begin
vdata1 := To_Date('01/06/2021 14:50'/*VInicio*/,'dd/mm/rrrr hh24:mi');
vdata2 := To_Date('02/06/2021 14:10'/*VFinal*/,'dd/mm/rrrr hh24:mi');
select count(dat)
into vtemp
from
(
select vdata1 + rownum-1 dat
from all_tables
where rownum <= ( vdata2 - vdata1)+1
)
where to_char(dat, 'd') not in (1,7);
--RETURN vtemp;
dbms_output.put_line('Numero de dias úteis: '||vtemp);
end;
No exemplo acima informa a quantidade de 1, quando na verdade deveria trazer 0,