You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:06:06