我正在尝试编写一个plpgsql
函数,该函数从树结构的记录中递归返回一组列。
我有一个数据表和一个将数据链接在一起的表:
DATATABLE
-----------
id integer
value text
info text
LINKTABLE
-----------
link integer
parent integer
我的想法是在以下功能中做类似的事情:
CREATE OR REPLACE FUNCTION my_function(itemID integer)
RETURNS TABLE(id integer, value text) AS
$BODY$
BEGIN
RETURN QUERY SELECT my_function(A.link) FROM linktable A, datatable B
WHERE A.parent = B.id AND B.id = itemID) C;
RETURN QUERY SELECT id, value FROM datatable WHERE id = itemID;
RETURN;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
但这不起作用,我在第一个查询中收到错误:
错误:查询结构与函数结果类型不匹配
我的Just-In-Brain编译器没有检测到任何问题,那么我在这里做错了什么?
你根本不需要函数,这可以用一条 SQL 语句来完成:
有关递归查询的介绍,请参阅手册:http ://www.postgresql.org/docs/current/static/queries-with.html
如果您确定要在 plpgsql 函数中执行此操作,则只需进行一些修改即可:
.*
添加datatable
,所以您必须在第二个查询中限定列名) C
以获得正确的语法无论如何,我同意 a_horse_with_no_name 关于使用 CTE 的观点。