Use a MONTHLY frequency:
DECLARE
start_date TIMESTAMP;
return_date_after TIMESTAMP;
next_run_date TIMESTAMP;
BEGIN
start_date := TO_TIMESTAMP_TZ('01-JAN-2013 00:00:00','DD-MON-YYYY HH24:MI:SS');
return_date_after := start_date;
FOR i IN 1..5
LOOP
dbms_scheduler.evaluate_calendar_string(
'FREQ=MONTHLY; BYMONTH=OCT; BYDAY=1SUN; BYHOUR=2',
start_date, return_date_after, next_run_date);
dbms_output.put_line('next_run_date: ' || next_run_date);
return_date_after := next_run_date;
END LOOP;
END;
/
next_run_date: 06/OCT/13 02:00:00.000000 AM
next_run_date: 05/OCT/14 02:00:00.000000 AM
next_run_date: 04/OCT/15 02:00:00.000000 AM
next_run_date: 02/OCT/16 02:00:00.000000 AM
next_run_date: 01/OCT/17 02:00:00.000000 AM