Usando variavel na clausula IN
Bom dia Pessoal,
Me deparei com uma situação que a principio julguei ser simples, porém, não consigo resolver e preciso de ajuda.
Criei uma procedure, nela recebo umas variáveis normalmente, uma delas é uma string com os números dos ct-e que devo processar nessa procedure. Entretanto a consulta usando essa string numa clausula IN não retorna nenhum registro, mas colocando na mão, retorna todos.
Fiz uma versão reduzida da minha procedure para mostrar o problema:
DELIMITER $$
DROP PROCEDURE IF EXISTS teste_insercao$$
CREATE
/[DEFINER = { user | CURRENT_USER }]/
PROCEDURE of_logistica.teste_insercao(IN oNumCtrcs VARCHAR(200))
BEGIN
DECLARE varteste CHAR(200);
DROP TEMPORARY TABLE IF EXISTS tbTMP_Cte_impressao;
CREATE TEMPORARY TABLE tbTMP_Cte_impressao(
_cod_emp VARCHAR(3),
_cod_fil VARCHAR(3),
_num_ctrc VARCHAR(6),
_serie_ctrc VARCHAR(3),
_xml_cte TEXT,
_processado INT
);
SET varteste = CONVERT(REPLACE(SUBSTRING(oNumCtrcs, 1,LENGTH(oNumCtrcs)), '|', ',') USING UTF8);
# faz o select para buscar todos os ctes que serão impressoas e insere na tabela temporária
INSERT INTO tbTMP_Cte_impressao (SELECT tbtms_ctrc.cod_emp, tbtms_ctrc.cod_fil, tbtms_ctrc.num_ctrc, tbtms_ctrc.serie_ctrc,
cte_xml.xml_homologado, 0 FROM tbtms_ctrc
LEFT JOIN tbtms_ctrc_xml cte_xml ON cte_xml.cod_emp = tbtms_ctrc.cod_emp
AND cte_xml.cod_fil = tbtms_ctrc.cod_fil
AND cte_xml.num_ctrc = tbtms_ctrc.num_ctrc
AND cte_xml.serie_ctrc = tbtms_ctrc.serie_ctrc
WHERE tbtms_ctrc.cod_emp = '004' AND tbtms_ctrc.cod_fil = '001' AND
# tbtms_ctrc.num_ctrc IN ( REPLACE(SUBSTRING(oNumCtrcs, 1,LENGTH(oNumCtrcs)), '|', ',')) order by tbtms_ctrc.num_ctrc);
tbtms_ctrc.num_ctrc IN (varteste) ORDER BY tbtms_ctrc.num_ctrc);
#SELECT REPLACE(SUBSTRING("'048418'|'048419'|'048420'|'048421'", 1, LENGTH("'048418'|'048419'|'048420'|'048421'")), '|', ',');
END$$
DELIMITER ;
Na chamada da procedure estou fazendo assim: CALL teste_insercao("'048418'|'048419'|'048420'|'048421'");
Já tentei várias coisas, conversões, mas não consegui resolver essa questão
Fiz alguns testes utilizando a consulta fora da procedure e não consegui resolver.
SET @ctrc = "'048418','048419','048420','048421'";
#SET @ctrc = "048418,048419,048420,048421";
SELECT @ctrc;
SELECT tbtms_ctrc.cod_emp, tbtms_ctrc.cod_fil, tbtms_ctrc.num_ctrc, tbtms_ctrc.serie_ctrc,
cte_xml.xml_homologado FROM tbtms_ctrc
LEFT JOIN tbtms_ctrc_xml cte_xml ON cte_xml.cod_emp = tbtms_ctrc.cod_emp
AND cte_xml.cod_fil = tbtms_ctrc.cod_fil
AND cte_xml.num_ctrc = tbtms_ctrc.num_ctrc
AND cte_xml.serie_ctrc = tbtms_ctrc.serie_ctrc
WHERE tbtms_ctrc.cod_emp = '004' AND tbtms_ctrc.cod_fil = '001' AND
tbtms_ctrc.num_ctrc IN (@ctrc);
Vocês sabem se é possível usar uma variável na clausula IN, tem algum exemplo que possam me demonstrar?
Obrigado
AnselmoDiscussão (1)
Carregando comentários...