Как передать несколько параметров через строковую перменную для подстановки в 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) ))