dbms_scheduler.evaluate_calendar_string evaluate the next run-date for a calendar string (which is used in the parameter repeat_interval of dbms_scheduler.create_schedule).
The following example prints each month's third business day between 2020-10-01 and sysdate, assuming that a business day is between Monday and Friday.
declare
dt_start date := date '2020-10-01';
dt_after date := dt_start;
dt_next date;
begin
loop
dbms_scheduler.evaluate_calendar_string(
'freq = monthly;' ||
'byday = mon,tue,wed,thu,fri;' ||
'bysetpos = 3' ,
---------------------------------
dt_start ,
return_date_after => dt_after ,
next_run_date => dt_next
);
exit when dt_next > sysdate;
dbms_output.put_line('next run date: ' || to_char(dt_next, 'yyyy-mm-dd'));
dt_after := dt_next;
end loop;
end;
/