Ir para conteúdo
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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por rodrigo antonio cruz
      Olá amigos, estou com uma dúvida que acredito ser bem básica, porém nunca precisei fazer isso, o problema é o seguinte: Tenho duas variáveis de conexao que sao do tipo privadas, quero que essas duas variáveis recebam os parametros como Token, e email, que vai vir do banco mysql, o problema é que nao to conseguindo fazer essas duas var receber os parametros, segue o código:
      <?php class Config{ //AQUI PRECISO PASSAR O EMAIL E TOKEN QUE VEM DO BD, O PROBLEMA N E NA CONSULTA MYSQL, E SIM EM COMO FAZER ESSAS DUAS PRIVATES RECEBEREM OS PARAMETROS private static $email = "rodrigocruz@hotmail.com"; private static $tokenProduction = "B5EF3B332329F50AB4298928950A52FCB1CE245C"; private static $sandbox = false; private static $tokenSandbox = ""; public static function getEmail(){ return self::$email; } public static function getToken(){ return self::isSandbox() ? self::$tokenSandbox : self::$tokenProduction; } public static function isSandbox(){ return self::$sandbox; } public static function setSandbox(){ self::$sandbox = true; } public static function setProduction(){ self::$sandbox = false; } public static function setAccountCredentials($email, $token, $isSandbox = true){ self::$email = $email; if($isSandbox === true) { self::setSandbox(); self::$tokenSandbox = $token; }else{ self::setProduction(); self::$tokenProduction = $token; } } }  
    • Por Alexandrephp
      Passar uma variavel json ou xml para php?
        var tempo = response.rows[0].elements[0].duration.te... 
      tempo = tempo.replace("day", "dia").replace("hour", "hora").replace("min", "min");   preciso colocar essa variavel em php   exemplo  $("#<? echo $tempo;?>").val(tempo); /// aqui consigo enviar para uma textbox. mas eu quero em php apenas uma variavel, ou session
    • Por Nova Ourora
      <div class="card-block"> <div class="card-block"> <form class="form-inline"> <select class="form-control" id="nmProduto" style="max-width: 300px;"> <option value="">Selecione o Produto</option> <option>SUPORTE PARA CARIMBO DE MADEIRA COM 06</option> <option>BOTON PERSONALIZADO - SESMT</option> <option>RELOGIO DESPERTADOR 0 A 60 MIN.</option> </select> Quero que esta DIV pegue os valores de uma variável (que fica na tabela produtos).
      PARECE SIMPLES MAIS TA DIFÍCIL
    • Por PeeWee
      Preciso somar os valores que estáo na tabela tempo_servico, para utiliza-la posteriormente em uma validação de um determinado campo, estou fazendo da seguinte forma:
      $tempoDoServico = mysqli_query($conn, "SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(tempo_servico))) FROM agendamento WHERE dia = '$diaAgendado' "); $tempoDoServico2 = mysqli_fetch_row($tempoDoServico);                      $time2= $tempoDoServico2[0];  $parts2=explode(':',$time2);  $seconds2 = ($parts2[0]*60) + $parts2[1];  $total2 = $seconds2 * 1;    //este numero 1 serve para outra coisa que no momento não nos interessa. O que ocorre é, quando há algum valor registrado na tabela, o código funciona normalmente, mas se não há nenhum valor ele exibe um erro (Notice: Undefined offset: 1 in ) isto em relação a variavel $parts2[1]. Só que sempre vai ocorrer desse registro estar vazio na primeira vez, após o primeiro usuario cadastrar sua consulta ele não exibirá mais erros. Não sei exatamente o que fazer, pois nao estou conseguindo entender, se está vazio ele simplesmente não deveria fazer nada e nao ficar exibindo erro. Espero que alguém mais experiente com PHP possa me ajudar. 
    • Por Superwagtel
      Olá pessoal estou com um dificuldade que parece boba, mas como sou iniciante no PHP , não estou conseguindo trabalhar com o include.
       
      Tenho a página categoria.php
      Nela eu preciso abrir outra página categoria-modulos.php como include, mas recebendo a variável cod
       
      quando insiro apenas a página no include, dá tudo certo :
       
      <?php include ("categoria-modulos.php"); ?> Mas quando tento inserir a variável no include, daí a página dá erro:
      <?php $cod = $_GET['Categorias.cod_mod']; include("categoria-modulos.php?cod=".$cod""); ?> Aqui o ['Categorias.cod_mod'] é o parâmetro do recordset.
      Pesquisei no youtube e no google também, foi onde encontrei este código, mas mesmo assim, não consigo acertar.
       
      Alguém poderia me dar uma Luz e dizer onde estou errando?
       
       
×

Informação importante

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