【发布时间】:2021-07-10 04:55:36
【问题描述】:
我是 PL/pgSQL 的新手。我们有一个 Postgres 11 数据库。
我需要一个函数,它将 1 个参数作为一个表的 ID,并在另一个表中进行递归搜索。它应该返回两列:id 和连接结果为text(或varchar)。
这是我的代码(更像是伪代码):
DROP FUNCTION IF EXISTS;
CREATE OR REPLACE FUNCTION my_awesome_func(AUID, UUID) RETURNS (RESULT TEXT) AS;
DECLARE RESULT TEXT;
BEGIN;
SELECT first_table.parent_uid FROM first_table WHERE first_table.auid = AUID;
WITH RECURSIVE child_to_parents AS (
SELECT second_table.* FROM second_table
WHERE aoguid = first_table.parent_uid
UNION ALL
SELECT second_table.* FROM second_table.*, child_to_parents
WHERE second_table.aoguid = child_to_parents.parentguid
AND second_table.currstatus = 0
)
END
SELECT * FROM child_to_parents ORDER BY aolevel;
小提琴在这里:
https://dbfiddle.uk/?rdbms=postgres_11&fiddle=dfa2838ab11356cc08987d0931f7b8e5
【问题讨论】:
-
不清楚函数应该返回什么。请添加
first_table和second_table创建包含数据和预期结果的脚本。 -
请创建一个 Fiddle 以便我们了解您的问题:dbfiddle.uk/?rdbms=postgres_11
-
小提琴准备好了。 dbfiddle.uk/… 谢谢。
-
感谢您提供示例数据(尽管只有相关列的表就足够了 :-P),但仍然不清楚您要如何调用该函数以及您的结果是什么期望,或者您当前的代码有什么问题。
-
小提琴中的查询与问题中的查询不一致。也不清楚要连接什么。
标签: postgresql plpgsql recursive-query