Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Anselmo De Oliveira Alves

Usando variavel na clausula IN

Recommended Posts

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

 

Anselmo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por lezão
      Boa tarde, galera!
      Tudo bem com vcs?
       
      Estou precisando de uma limitador de palavras.
      Tenho um texto de 600 palavras e gostaria de que na pagina principal aparece se, apenas 30 palavras do texto.
      Achei esse codigo na innternet, mas ele não limita palavras, mas sim ele corta as palavras ficando assim:  "Tenho um texto de 600 palav..."
      ?php echo substr("$texto;", 0, 200); ? com uma variavel que limita as palavras ficaria assim: "Tenho um texto de 600 palavras". exibiria essas 6 palavras.
    • Por Luiz Henrique
      Olá pessoas,
       
      Tenho uma classe e dentro dela várias chamadas para métodos de acordo com a necessidade em outra classe (para obter dados DB), como são muitas e vou duplicar os arquivos, para ganhar tempo queria colocar o nome da classe em uma variável porém não funciona.
       
      use Class1; class Class2 { public $className = 'Class1'; ... $dados = $this->className::function(); // não funciona } Era para gerar isso:
      $dados = Class1::function();
      Se eu der um echo $this->$className, ele me retorno o nome da Class1 porém para executar um método dentro da Class1 não vai, diz que a classe Class1 não existe!
      Tem alguma forma de funcionar isso?
       
      Obrigado.
    • Por Boca
      Pessoas estou com uma duvida preciso de ajuda
      Tenho alguns campos chamados "horario_0, horario_1, horario_2, horario_3, horario_4, horario_5, horario_6 no meu banco de dados
      estou precisando que ela seja dinâmica dentro de um for
      exemplo:
       
      <?php for ($dia = 0; $dia < 7; $dia++): $resultadoBD->horario_$dia endfor; ?>  
    • Por SAS Junior
      Bom dia!
      Estou com uma dúvida, sou novo com sql, estou com um probleminha, todo dia preciso gerar lista de clientes pegar o id deles para fazer consulta posterior, como posso atribuir esses id's a uma variável e fazer a outra consulta por essa variável, é possível fazer isso? 
    • Por RickSilva
      Bom, preciso criar uma funçao que faz uma variavel string ter um valor durante um periodo de 5 segundos e depois outro valor durante os proximos 5 segundos, fazendo isso a todo momento. Por exemplo: Uma variavel cor que tenha como valor "preto" durante 5 segundos e depois receba o valor "branco".  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.