2009-10-02 1 views
-1

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

как:

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

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

+3

Что ваша проблема: как сделать иерархический запрос, как отформатировать его как .CSV файл или оба? – APC

ответ

0

Мы просто отошли от 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 
2

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

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

Дополнительные параметры here