我有以下查询给我一个表:
WHERE ROOT.parent_node = x
但我想要一个用CREATE FUNCTION childs(x INT) RETURNS TABLE
RETURN
WITH RECURSIVE EXPL (parent_node, node, filename) AS
(
SELECT ROOT.parent_node, ROOT.node, ROOT.filename
FROM filesystem ROOT
WHERE ROOT.parent_node = x
UNION ALL
SELECT CHILD.parent_node, CHILD.node, CHILD.filename
FROM EXPL PARENT, filesystem CHILD
WHERE PARENT.node = CHILD.parent_node
)
SELECT DISTINCT parent_node, node, filename
FROM EXPL
ORDER BY parent_node, node;
END;
替换{{1}}的函数。 X是一个整数,它是函数参数。
我想过,但根本不正确:
{{1}}
答案 0 :(得分:2)
您的功能定义缺少BEGIN
&在QUERY
RETURN
CREATE OR REPLACE FUNCTION childs(x int)
RETURNS TABLE (parent_node integer, node integer, filename varchar(255)) AS
$function$
BEGIN
RETURN QUERY
WITH RECURSIVE expl (parent_node, node, filename) AS
(
SELECT root.parent_node, root.node, root.filename
FROM filesystem root
WHERE root.parent_node = x
UNION ALL
SELECT child.parent_node, child.node, child.filename
FROM expl parent, filesystem child
WHERE parent.node = child.parent_node
)
SELECT DISTINCT expl.parent_node, expl.node, expl.filename
FROM expl
ORDER BY parent_node, node;
END
$function$ LANGUAGE plpgsql;
使用这样的功能:
SELECT * FROM childs(1)