Создание какой-либо записи в PL / SQL - PullRequest
1 голос
/ 24 апреля 2011

Я пытаюсь написать рекурсивную функцию сорта в PL / SQL.

Проблема в том, что

Так, скажем, в таблице A есть строки:

 {B, C},
 {C, D},
 {C, F},
 {D, E},
 {E, F}

Вернуть все, от чего зависит B, прямо и косвенно.

Кортеж {B, C} подразумевает, что B зависит от C, C зависит от D и так далее, и так далее.Эта функция, если задано B, будет возвращать курсор или что-то, что приведет к: {C, D, F, E} Обратите внимание, что простое циклическое прохождение и просто печать значений может привести к дублирующим результатам (в данном случае, E).

Я довольно новичок в PL / SQL и не могу придумать, как это сделать.

Заранее благодарен за любую помощь!

1 Ответ

4 голосов
/ 24 апреля 2011

Предполагается, что таблица выглядит следующим образом:

ID    PARENT_ID
---   ---------
B     C
C     D
C     F
D     E
E     F

Почему бы вам не использовать иерархический запрос вроде:

select distinct parent_id
  from (select parent_id
          from my_table
         start with ID = 'B'
               connect by nocycle id = prior parent_id
       )
 order by parent_id

Этот SQL не проверен, но он должен быть точкой в ​​правильном направлении; Ваша функция может вернуть этот курсор, если это то, что вам нужно, или массив значений, если нет.

...