PL/pgSQL函数SELECT结果追加传入参数作为返回列的实现方法
解决方法
你遇到的问题核心有两点:
- 函数入参名和返回表的
param列名重名,PL/pgSQL默认会优先识别为返回列,导致无法正确引用入参 - SELECT查询中不需要给字段加类型声明,只有定义返回结构、表结构时才需要指定类型
你可以任选以下两种方案实现需求:
方案1:用函数名限定入参(不用修改参数/返回列命名)
直接用函数名.参数名明确指代入参即可,完整代码如下:
create or replace function somefunc(param varchar) returns table(fielda varchar, fieldb int, param varchar) language plpgsql as $$ begin return query select t.fielda, t.fieldb, somefunc.param -- 用函数名限定,明确引用入参 from sometable t join othertable ot on t.id = ot.other_id; end; $$;
方案2:修改入参名避免命名冲突
把入参改名为不会和返回列冲突的名称(比如加前缀p_),直接引用即可,代码可读性更高:
create or replace function somefunc(p_param varchar) returns table(fielda varchar, fieldb int, param varchar) language plpgsql as $$ begin return query select t.fielda, t.fieldb, p_param -- 直接引用改名后的入参 from sometable t join othertable ot on t.id = ot.other_id; end; $$;
内容的提问来源于stack exchange,提问作者docHoliday
相关产品推荐
相关产品推荐

