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
相关产品推荐
相关产品推荐

