2009-10-02 136 views
-1

我在Oracle 9i数据库表的父子关系PLSQL甲骨文父子

,如:

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

我有绝对的父母(如子女1),我需要一个CSV文件列表或该父母的所有孩子的结果集。

+3

你的问题是什么:如何做分层查询,如何将其格式化为.csv文件,还是两者? – APC 2009-10-02 10:39:44

回答

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