如何在PL/pgSQL函数中结合WITH子句与RETURN QUERY SELECT返回结果集
问题原因
你遇到的语法错误是因为 PL/pgSQL 中 RETURN QUERY 关键字后必须直接跟完整的查询语句,而 WITH 公共表表达式属于 SELECT 查询的一部分,不能拆分放到 RETURN QUERY 前面。另外你原代码的查询语句末尾也缺失了必要的分号。
正确实现代码
将 WITH 子句整体放到 RETURN QUERY 之后即可正常运行:
CREATE FUNCTION f1() RETURNS TABLE(v1 varchar, v2 varchar) LANGUAGE plpgsql AS $$ BEGIN RETURN QUERY WITH tbl AS ( SELECT 'a' AS aa , 'b' AS bb ) SELECT aa as v1, bb as v2 from tbl; END; $$;
简化方案
如果你的函数逻辑仅为返回查询结果,不需要额外的过程控制逻辑,也可以直接使用 SQL 语言函数,代码更简洁高效:
CREATE FUNCTION f1() RETURNS TABLE(v1 varchar, v2 varchar) LANGUAGE sql AS $$ WITH tbl AS ( SELECT 'a' AS aa , 'b' AS bb ) SELECT aa as v1, bb as v2 from tbl; $$;
内容的提问来源于stack exchange,提问作者user1409708
相关产品推荐
相关产品推荐

