假设我有以下表结构:
| ID | ParentID | Name |
我想编写一个递归 PostgreSQL 函数来获取节点 ID 的所有子节点作为参数传递给它。
到目前为止,这是我的代码(我只有一部分函数可以获取传递的 ID 的所有子代,现在我需要递归部分):
CREATE OR REPLACE FUNCTION GetAllChildren(IN NodeID INTEGER) RETURNS INTEGER AS $$
DECLARE
Crs CURSOR FOR SELECT ID, ParentID, Name FROM Tree WHERE ParentID=NodeID;
VarRow Tree%ROWTYPE;
BEGIN
OPEN Crs;
CREATE TEMPORARY TABLE TBL(
ID SERIAL,
ParentID INTEGER,
Name CHARACTER(100)
);
LOOP
FETCH Crs INTO VarRow;
IF VarRow IS NULL THEN
EXIT;
END IF;
INSERT INTO TBL(ID, ParentID, Name) VALUES(VarRow.ID, VarRow.ParentID, VarRow.Name);
END LOOP;
CLOSE Crs;
RETURN 0;
END;
$$ LANGUAGE plpgsql;
也许最大的问题是我不知道在递归调用之间将输出保存在哪里。
如果到目前为止您还没有弄清楚,那就是邻接列表,获取节点的所有子节点并将它们打印到表中。
有没有人有办法解决吗?