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[]);
我正在尝试将值列表传递到 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[]);