Puoi calcolare il numero del "periodo" con una query ricorsiva, come segue.
Come espresso nei commenti sotto la tua domanda, non capisco cosa intendi con la colonna "settimana" (e sospetto che sia possibile che la tua definizione sia effettivamente incoerente, lascia a te il chiarimento).
with
r (plan, period, max_periods, start_date) as (
select plan, 1, max_periods, start_date
from table_1
union all
select plan, period + 1, max_periods,
least(start_date + 7, add_months(trunc(start_date, 'mm'), 1))
from r
where period < max_periods
)
select plan, period, start_date
from r
;
PLAN PERIOD START_DATE
---- ---------- ----------
A 1 2020-05-01
A 2 2020-05-08
A 3 2020-05-15
A 4 2020-05-22
A 5 2020-05-29
A 6 2020-06-01
A 7 2020-06-08
A 8 2020-06-15
A 9 2020-06-22
A 10 2020-06-29
A 11 2020-07-01
A 12 2020-07-08
Questo si basa sui periodi massimi di TABLE_1 e non sto usando affatto TABLE_2. Puoi unire le due tabelle dopo aver generato questo set di risultati dalla sola TABLE_1 o adattare l'approccio secondo necessità.