Как передать несколько параметров через строковую перменную для подстановки в SQL операток IN

Не понимаю как разбить по строкам

Нужно что бы выводил как в запросе (если сможете то сделать без дубликатов) введите сюда описание изображения

А при запуске процедуры происходит введите сюда описание изображения введите сюда описание изображения

Вот это надо разбить по запитым как я понял введите сюда описание изображения

create or replace procedure FindDish (idtype in number, ingrlist in varchar2, idseason in number, timecooking in number) 
IS
select_query varchar2(4000);
create_query varchar2(4000);
total varchar2(4000);
begin
select_query := 'Select Name FROM INGR, dish, seas, seq where dish.id = seq.dish_id and dish.seas_id = seas.seas_id and ingr.INGR_ID = seq.INGR_ID and ingr_name in (' || ingrlist ||')';
create_query := 'Create table T_'|| generate_name(10) || ' AS ' || select_query;
dbms_output.enable;
DBMS_OUTPUT.put_line(select_query);
EXECUTE IMMEDIATE create_query;
end;

CREATE OR REPLACE FUNCTION generate_name(len number) RETURN VARCHAR2 IS
my_str varchar2(255);
BEGIN
FOR i in 1..len LOOP
my_str := my_str || dbms_random.string(
CASE WHEN dbms_random.VALUE(0, 1) < 0.5 THEN 'l' ELSE 'x' END, 1);
END LOOP;
RETURN my_str;
END;

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

Автор решения: Alex R.

Ошибка в передаче строкового параметра с возможными значениями оператора IN для подстановки в запрос, вместо

'Сахар, Банан'

должно быть

'''Сахар'', ''Банан'''

В первом случае строка воспринимается как одно значение и выполняется

select * from <...> where ingr_name in ('Сахар, Банан')

а правильно

select * from <...> where ingr_name in ('Сахар', 'Банан')

Чтобы добиться корректной подстановки необходимо каждое отдельное значение заключить в кавычки, предварительно их удвоив.

→ Ссылка
Автор решения: parakimax
select * from INGR
where ingr_name in (select value from STRING_SPLIT(@ingrlist, CHAR(13) ))
→ Ссылка