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

PostgreSQL是否支持在WITH Clause中定义函数?Oracle有对应实现

PostgreSQL对WITH子句定义函数的支持情况

PostgreSQL 12及更高版本已经原生支持在WITH子句中定义临时函数,这类函数仅在当前查询的生命周期内有效,不会持久化存储到数据库系统表中,和你提到的Oracle对应功能的能力完全对齐。

对应你给出的Oracle示例,PostgreSQL的实现写法如下:

WITH FUNCTION add_fnc(p_id numeric) RETURNS numeric AS $$
BEGIN
  RETURN p_id + 1;
END;
$$ LANGUAGE plpgsql
SELECT add_fnc(id1) FROM test_tbl;

使用注意事项:

  • 和Oracle的语法差异:PostgreSQL定义WITH函数时需要用$$包裹函数体,同时显式指定函数使用的过程语言,上面示例用的是最常用的PL/pgSQL,你也可以根据需求替换为SQL、PL/Python等PostgreSQL支持的其他语言
  • 如果同一个WITH子句中需要同时定义普通CTE和临时函数,函数定义必须放在所有普通CTE的前面
  • 12版本以下的PostgreSQL不支持该语法,你可以通过创建临时函数实现同等效果,临时函数在当前数据库会话结束后会自动删除,示例如下:
-- 创建会话级临时函数
CREATE TEMP FUNCTION add_fnc(p_id numeric) RETURNS numeric AS $$
BEGIN
  RETURN p_id + 1;
END;
$$ LANGUAGE plpgsql;

-- 执行业务查询
SELECT add_fnc(id1) FROM test_tbl;

内容的提问来源于stack exchange,提问作者Vibhuti Salvi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:24:03