oracle v.11.2. Generate new ids for hierarchical query

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 позволяет однократно сгенерировать новые ключи и в дальнейшем за счет этого получать доступ к соответствующим родительским ключам.