gpt4 book ai didi

函数中的 Postgresql 公共(public)表达式表 (CTE)

转载 作者:行者123 更新时间:2023-11-29 13:15:24 27 4
gpt4 key购买 nike

我正在尝试在 PostgreSQL 函数中使用 CTE 并将 CTE 作为表返回。但是我无法编译该函数,因为它在选择查询中显示 ERROR: syntax error at end of input。有人可以指出我在这里缺少的东西。

CREATE OR REPLACE FUNCTION my_func(name varchar) RETURNS TABLE (hours integer) AS $$
BEGIN
WITH a AS (
SELECT hours FROM name_table tbl where tbl.name= name; <- giving error here
)
RETURN QUERY SELECT hours FROM a;
END;
$$ LANGUAGE plpgsql;

PS:如果有帮助,我正在使用 PostgreSQL 9.6。

最佳答案

CTE 表达式是查询的一部分,因此它需要紧跟在 return query 子句之后,而不是在它之前。此外,为了避免以后出现语法错误,您应该选择一个不会与列名混淆的参数名称,并完全限定您正在查询的列:

CREATE OR REPLACE FUNCTION my_func(v_name varchar)
RETURNS TABLE (hours integer) AS $$
BEGIN
RETURN QUERY WITH a AS (
SELECT tbl.hours
FROM name_table tbl
WHERE name = v_name
)
SELECT a.hours FROM a;
END;
$$ LANGUAGE plpgsql;

关于函数中的 Postgresql 公共(public)表达式表 (CTE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49882488/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com