我试图在PostgreSQL函数中使用CTE并将CTE作为表返回。但我无法按照select 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;
来编译函数。有人能指出我在这里失踪的东西。
{{1}}
PS:如果有帮助,我会使用PostgreSQL 9.6。
答案 0 :(得分:1)
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;