sql中返回表的函数(Postgres SQL)

时间:2018-05-27 12:47:30

标签: sql postgresql

我有以下查询给我一个表:

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}}

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)