我是postgres的新手。我想完成一项简单的任务。
我有如下功能:
create or replace function function1(source json)
returns json as $$
DECLARE
output_data json;
begin
raise notice '%',source::text;
select json_agg(name_id) into output_data from table1 where channel_id in SOURCE; -- I want to use SOURCE as dynamic
return output_data;
end;
$$ LANGUAGE plpgsql;
该函数接受输入json参数(source),我想使用参数运行IN子句。
例如, 当我运行以下内容时:
select function1('[5555558,5555559]');
我应该得到类似[11111,22222]的输出--->这些是name_id
完成此任务的一种方法是将SOURCE的所有值插入表(new_table),然后执行以下操作。
select json_agg(name_id) into output_data from table1 where channel_id in (select channel_id from new_table);
我想知道其他更好的技术,例如使用等效的集合或动态查询。
谢谢
答案 0 :(得分:1)
原则上,这可以使用单个SQL语句完成:
SELECT json_agg(t.name_id)
FROM table1 t
JOIN json_array_elements_text('[5555558,5555559]'::json) j(value)
ON j.value = t.channel_id::text;
如果你想要一个功能,那么它只是:
CREATE FUNCTION function1 (source json) RETURNS SETOF json AS $$
SELECT json_agg(t.name_id)
FROM table1 t
JOIN json_array_elements_text(source) j(value) ON j.value = t.channel_id::text;
$$ LANGUAGE sql;