2009-10-02 8 views
-1

J'ai une relation parent-enfant dans un Oracle 9i base de données tableplsql enfant parent oracle

comme:

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

J'ai un parent absolu (par exemple enfant 1) et j'ai besoin d'une liste csv ou resultset de tous les enfants de ce parent.

+3

Quel est votre problème: comment faire la requête hiérarchique, comment le formater au format .csv fichier, ou les deux? – APC

Répondre

0

Nous venons de quitter Oracle mais j'ai écrit cette procédure pour vous dans SQL Server (ils devraient être très similaires, sauf les déclarations 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

L'utilisation SYS_CONNECY_BY_PATH vous donnera toute la virgule de la hiérarchie séparés:

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

D'autres options here

Questions connexes