plsql oracle父级子级
我在Oracle 9i数据库表中具有父子关系 比如:plsql oracle父级子级,sql,plsql,oracle9i,Sql,Plsql,Oracle9i,我在Oracle 9i数据库表中具有父子关系 比如: 我有一个绝对父对象(例如,子对象1),我需要一个此父对象的所有子对象的csv列表或结果集。我们刚离开Oracle,但我在SQL Server中为您编写了此过程(除了光标声明,它们应该非常相似) 使用SYS_CONNECY_BY_PATH将为您提供以逗号分隔的整个层次结构: SELECT SYS_CONNECT_BY_PATH(parent, ',') "PATH" FROM table START WITH child = 1 C
我有一个绝对父对象(例如,子对象1),我需要一个此父对象的所有子对象的csv列表或结果集。我们刚离开Oracle,但我在SQL Server中为您编写了此过程(除了光标声明,它们应该非常相似)
使用SYS_CONNECY_BY_PATH将为您提供以逗号分隔的整个层次结构:
SELECT SYS_CONNECT_BY_PATH(parent, ',') "PATH"
FROM table
START WITH child = 1
CONNECT BY PRIOR child = parent;
进一步的选项您的问题是什么:如何进行分层查询,如何将其格式化为.CSV文件,或者两者兼而有之?
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
SELECT SYS_CONNECT_BY_PATH(parent, ',') "PATH"
FROM table
START WITH child = 1
CONNECT BY PRIOR child = parent;