Вы можете сгенерировать значения, используя row_number()
:
with t1 as (
select t1.*, rownum as seqnum
from table_1 t1
),
t2 as (
select t2.*, rownum as seqnum, count(*) over () as cnt
from table_2 t2
) t2
select t1.*, t2.perid
from table_1 t1 join
table_2 t2
on mod(t1.seqnum - 1, t2.cnt) = t2.seqnum;
Если вам нужно действительно обновить значение, тогда merge
, вероятно, самый простой подход.
merge into table_1 t1
using (with t1 as (select t1.*, rownum as seqnum
from table_1 t1
),
t2 as (
select t2.*, rownum as seqnum, count(*) over () as cnt
from table_2 t2
) t2
select t1.*, t2.perid
from table_1 t1 join
table_2 t2
on mod(t1.seqnum - 1, t2.cnt) = t2.seqnum
)
on (s.caseid = t1.caseid)
when matched
then update
set t1.perID = s.perID;