MySQL динамический SQL с использованием IN - PullRequest
0 голосов
/ 22 марта 2012

Я хотел бы создать sp со следующим кодом:

select *
from document
where cod_emp='AAA'
and cod_situation in ('01','02','03');

Но я бы хотел ('01', '02', '03') быть параметром, поэтому я подумал, что что-то вроде этого будет работать:

-- sp's call

call sp('"01","02","03"');

-- sp's parameter

in param_txt_cod_situation text;

-- sp's code

set @cons1=
'select *
from document
where cod_emp="AAA" ';

if length(param_txt_cod_situation)>0 then
set @param_txt_cod_situation=param_txt_cod_situation;
set @cons2='and cod_situacion in concat("(",?,")") '
else
set @param_txt_cod_situation=true;
set @cons2='and ?';
end if;

set @cons=concat(
@cons1,
@cons2);

prepare cons from @cons;
execute cons using
@param_txt_cod_situation;
deallocate prepare cons;

Но это не сработало.

Надеюсь, вы, ребята, можете мне помочь. Большое спасибо.

1 Ответ

1 голос
/ 23 марта 2012

Функция concat возвращает строку в любом запросе, в котором она находится. Вы не хотите видеть, находится ли что-либо в строке, а есть список.

Заменить

set @cons2='and cod_situacion in concat("(",?,")") '

с

set @cons2=concat('and cod_situacion in (',?,') ')

и посмотрите, работает ли это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...