postgres 过程值列表

postgres procedure list of values

我正在尝试将值列表传递到 Postgres 11 过程中。查询有一个 IN 条件。如何将值列表传递给过程,然后如何在查询中使用它?

create or replace procedure some_procedure(
  source_id_list character varying  <-- is this correct?
  )
language plpgsql
as $$
declare
  result_count int;
begin
select count(*)
into result_count
from table sd
where sd.id in source_id_list  <-- syntax error
;
RAISE NOTICE 'result: %', result_count;
end;
$$

IN 需要一个值列表,而你给它的是一个字符串。

如果您可以将参数的数据类型更改为过程,那么使用数组会更简单:

create or replace procedure some_procedure(source_id_list int[])
language plpgsql
as $$
declare
    result_count int;
begin
    select count(*)
    into result_count
    from table sd
    where id = any(source_id_list);
    
    raise notice 'result: %', result_count;
end;
$$

如果您不能更改数据类型的参数,那么另一个选项使用 string_to_array() 将字符串解析为数组:

select count(*)
into result_count
from table sd
where sd.id = any(string_to_array(source_id_list, ',')::int[]);