2009-10-02 81 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