函数中的 Postgresql 通用表达式 Table (CTE)
Postgresql Common Expression Table (CTE) in Function
我正在尝试在 PostgreSQL 函数中使用 CTE 并将 CTE 作为 table 返回。但是我无法按照 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;
PS:如果有帮助,我正在使用 PostgreSQL 9.6。
CTE 表达式是查询的一部分,因此它需要紧跟在 return query
子句之后,而不是在它之前。此外,为了避免以后出现语法错误,您应该 select 一个与列名没有歧义的参数名称,并完全限定您正在查询的列:
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 函数中使用 CTE 并将 CTE 作为 table 返回。但是我无法按照 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;
PS:如果有帮助,我正在使用 PostgreSQL 9.6。
CTE 表达式是查询的一部分,因此它需要紧跟在 return query
子句之后,而不是在它之前。此外,为了避免以后出现语法错误,您应该 select 一个与列名没有歧义的参数名称,并完全限定您正在查询的列:
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;