Puede calcular el número del "período" con una consulta recursiva, de la siguiente manera.
Como se expresa en los comentarios debajo de su pregunta, no entiendo muy bien lo que quiere decir con la columna "semana" (y sospecho que es posible que su definición sea realmente inconsistente; se lo dejo a usted para que lo aclare).
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
Esto se basa en los períodos máximos de TABLE_1, y no estoy usando TABLE_2 en absoluto. Puede unir las dos tablas después de generar este conjunto de resultados solo a partir de TABLE_1 o adaptar el enfoque según sea necesario.