Ввод - это varchar, так что, по сути, то, что вы имеете в операторе удаления, выглядит примерно так:
удалить из mytable, где request_id в ('1,2,3,4');
Внутри процедуры базы данных вы не можете запустить «выполнить немедленно», поэтому вы не можете построить строку удаления без кавычек и выполнить ее динамически (хотя это может быть вариант для вас, если ваша вызывающая программа «выполняет немедленно» "доступно).
Чтобы обработать список IN в процедуре базы данных, я думаю, вам нужно будет перебрать строку ввода и удалить для каждого значения ...
например:
set session authorization ingres;
drop table if exists mytable;
create table mytable(request_id integer);
insert into mytable values(1),(2),(5),(10);
drop procedure if exists sptest;
create procedure sptest
(
In Ids varchar(300)
)
AS
declare msg = varchar(300) not null;
eno = integer not null;
rc = integer not null;
pos = integer not null;
n = varchar(300);
BEGIN
while (length(:Ids) > 0)
do
pos = locate(:Ids, ',');
n = left(:Ids, :pos-1);
Ids = shift(:Ids, -1 * pos);
msg = 'Removing ' + :n;
message :msg;
Delete from "ingres".mytable where request_id = integer(:n);
select iierrornumber, iirowcount into :eno, :rc;
msg = 'Error number '+varchar(:eno) + ' rowcount ' + varchar(:rc);
message :msg;
endwhile;
END;
execute procedure sptest('1,5,10');
select * from mytable;