Как передать несколько значений в условие запроса как параметр процедуры?

В хранимой процедуре есть запрос, который ищет по входному параметру input_param:

 procedure tst (input_param in varchar2)
    is
        select
            so_much_columns
        from
            so_much_tables
        where
            value in (input_param);
    end tst;

При вызове процедуры нужно передавать два значения как параметр:

call tst.tst (input_param => 'Tst1, Tst2');

Но такое, конечно, не работает, т.к. для IN оператора input_param это одно значение.

Как можно решить, есть ли уже какие-то решения для этого случая?


Ответы (1 шт):

Автор решения: 0xdb

Надо поделить строку переданную как параметр по запятой на колонки таблицы.
Например так:

create table t1 as 
    select rownum id, cast (column_value as varchar2 (5)) value
    from xmlTable ('"Tst1", "Tst2"');

create or replace procedure getrows (params varchar2) is
    rc sys_refcursor;
begin
    open rc for
    select id, value
    from t1
    where value in (
        select trim (column_value) params 
        from xmlTable (('"'||replace (params, ',', '","')||'"'))
    );
    dbms_sql.return_result (rc);
end;
/

exec getrows (params => 'Tst1, Tst2')

Результат:

        ID VALUE
---------- -----
         1 Tst1 
         2 Tst2 
→ Ссылка