首页 > 解决方案 > 将 select 语句作为参数传递给 sql 函数

问题描述

我有功能:

create or replace function provide_city_name(id_offer int)
returns varchar                                       
language plpgsql
as
$$
declare
   city_record record;                               
begin
   select id, type, parent_id, name 
   into city_record                             
   from location
   where id = id_offer;
   
   if city_record.type < 6 then                
    return city_record.name;                    
   else
    return provide_city_name(city_record.parent_id); 
   end if;
end;
$$;

我想要做的是将 SELECT 结果作为函数的参数传递。我的选择声明:select offer_id from offers limit 5 我的结果是:

     offer_id
1    146
2    147
3    148
4    149
5    150

我想通过我的函数来转换它:

select provide_city_name(select offer_id from offers limit 5)

结果应该看起来像

     offer_id
1    New York
2    Las Vegas
3    London
4    New York
5    Moscow

如何使用参数选择语句运行我的函数?

标签: sqlpostgresql

解决方案


在 Postgres 9.3或更高版本中,您可以尝试使用LATERAL join

SELECT o.id, o.name 
FROM   offers O
LEFT   JOIN LATERAL provide_city_name(o.offer_id) f ON true

推荐阅读