Когда SSRS передает параметр, он имеет вид: Param1, Param2, Param3.
В процедуре вам просто нужно поместить идентификаторы вокруг каждого параметра. А также идентификаторы вокруг значения, которое возвращается набором данных. В моем случае я использовал точки с запятой.
CREATE OR REPLACE PROCEDURE user.parameter_name (
i_multivalue_parameter
)
AS
l_multivalue_parameter varchar2(25555) := ';' || replace(i_multivalue_parameter,',',';') || ';';
BEGIN
select something
from dual
where (
instr(l_multivalue_parameter, ';' || database_value_that_is_singular || ';') > 0
)
END;
i_multivalue_parameter передается через SSRS.
l_multivalue_parameter считывает параметр, переданный через SSRS, и помещает идентификаторы вокруг каждого значения.
database_value_that_is_singular - это значение, возвращаемое для каждой записи.
То есть, если через SSRS передаются 'Type1, Type2, Type3':
i_multivalue_parameter: Тип1, Тип2, Тип3
l_multivalue_parameter:; Тип1; Тип2; Тип3;
database_value_that_is_singular is:; Type1; или; Тип2; или; Тип3;
Instr вернет значение больше 0, если параметр соответствует.
Это работает, даже если все параметры похожи. Например: «Тип А» и «Тип АА». То есть «Тип А» не будет соответствовать «Типу АА».