plsql оракул родитель ребенок - PullRequest
0 голосов
/ 02 октября 2009

У меня есть родительско-дочерние отношения в таблице базы данных Oracle 9i

как:

parent | child  
1      | 2  
2      | 3
2      | 4
null   | 1
1      | 8

У меня есть абсолютный родитель (например, ребенок 1), и мне нужен список csv или набор результатов всех потомков этого родителя.

Ответы [ 2 ]

2 голосов
/ 08 октября 2009

Использование SYS_CONNECY_BY_PATH даст вам всю иерархию через запятую:

SELECT SYS_CONNECT_BY_PATH(parent, ',') "PATH" 
  FROM table 
 START WITH child = 1 
CONNECT BY PRIOR child = parent; 

Дополнительные опции здесь

0 голосов
/ 08 октября 2009

Мы только что перешли с Oracle, но я написал эту процедуру для вас в SQL Server (они должны быть очень похожими, за исключением объявлений CURSOR).

CREATE PROCEDURE ShowRelationships
@parent AS int
AS
 PRINT 'Parent =  ' + CAST(@parent AS varchar(3))

 DECLARE @child AS int;
 DECLARE cur_children CURSOR
 FOR
  SELECT child
  FROM PCREL
  WHERE parent = @parent;

 OPEN cur_children;
 FETCH NEXT FROM cur_children INTO @child;

 IF (@child IS NULL)
 BEGIN
  PRINT CAST(@parent AS varchar(3)) + ' has no children...';
 END

 WHILE @@FETCH_STATUS = 0
 BEGIN
  PRINT 'Child = ' + CAST(@child AS varchar(3))

  FETCH NEXT FROM cur_children INTO @child;
 END

 CLOSE cur_children;
 DEALLOCATE cur_children;


 SELECT TOP 1 @child = child
 FROM PCREL
 WHERE parent = @parent;

 EXECUTE ShowRelationships @child;

GO
...