2013-10-15 4 views
0

Я могу быть с этим, но я пытаюсь написать процедуру, которая вставляет всех предков данного ребенка в новую таблицу. Вот что у меня есть:PL/SQL: вызывать процедуру рекурсивно

create or replace procedure ancestors(childIn IN varchar2) 
is 
begin 
insert into AncestorTable(Parent) 
select Parent from Family 
where Child=childIn; 
ancestors(Parent); 
end; 
/

Я знаю, что ancestors(Parent) это далеко, но мне было интересно, если есть простой способ сделать это, не вдаваясь в курсоры. Если мне нужен курсор, могу ли я получить какое-то направление, как это сделать? Спасибо за понимание.

ответ

2

Попробуйте hierarchical query.

Что-то вроде

select Parent 
    from Family 
start with Child=childIn 
connect by prior Parent = Child; 

Вот sqlFiddle

Таким образом, вы можете сделать одну вставку, и вам не нужно рекурсии.

insert into AncestorTable(Parent) 
(select Parent 
    from Family 
start with Child=childIn 
    connect by prior Parent = Child); 
Смежные вопросы