with
-- source hierarchical test data
tbl1(id, pid) as (
select 1, null from dual union all
select 2, 1 from dual union all
select 3, 2 from dual union all
select 4, null from dual union all
select 5, 4 from dual union all
select 6, null from dual union all
select 7, 6 from dual union all
select 8, 7 from dual union all
select 9, 8 from dual union all
select 10, 9 from dual
),
-- source hierarchical test data with generated new ids
tble2(new_id, id, pid) as (
select floor(dbms_random.value(1, 1000)) new_id , id, pid
from tbl1
)
select
level
,r.id
,r.pid
,sys_connect_by_path(r.id, '\')
,r.new_id
,r.new_pid
,sys_connect_by_path(r.new_id, '\')
from (
select
t2.id
,t2.pid
,t2.new_id
,(select t.new_id from tble2 t where t2.pid = t.id) new_pid
from tble2 t2
) r
connect by prior r.id = r.pid
start with r.pid is null
Как сгенерировать новые ключи для иерархических записей? Выше представлен один из способов решения данной задачки. Генерация новых ключей, понятное дело приведено для примера, в Вашем случае могут использоваться consequences. Конструкция with позволяет однократно сгенерировать новые ключи и в дальнейшем за счет этого получать доступ к соответствующим родительским ключам.