Vous pouvez calculer le nombre de "période" avec une requête récursive, comme suit.
Comme indiqué dans les commentaires sous votre question, je ne comprends pas très bien ce que vous voulez dire avec la colonne "semaine" (et je soupçonne qu'il est possible que votre définition soit en fait incohérente - à vous de clarifier).
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
Ceci est basé sur les périodes maximales de TABLE_1, et je n'utilise pas du tout TABLE_2. Vous pouvez joindre les deux tables après avoir généré cet ensemble de résultats à partir de TABLE_1 uniquement, ou adapter l'approche si nécessaire.