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 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?
       
       
    • Por TeixeiraRamos
      Olá,
      Tenho esse código:
      <?php class Funcionario { $nome; $salario; $previdencia; $descontos; function __construct($nome, $salario, $previdencia) { $this->nome = $nome; $this->salario = $salario; $this->previdencia = $previdencia; $this->descontos = $this->calcularDescontos(); } function calcularDescontos() { return round($this->salario * 0.275 + $this->previdencia,2); } } $funcionarios = array(); $funcionarios[0] = new Funcionario("João Filho", 1000, 100); $funcionarios[1] = new Funcionario("Maria Rute", 2000, 200); $funcionarios[2] = new Funcionario("José Salgado", 3000, 300); for ($i = 0; $i < count($funcionarios); $i++) { $func = $funcionarios[$i]; echo "O valor do desconto de $func->nome é $func->descontos <br>"; } ?> O Resultado é esse Error:
       
      A linha 3 é essa:
       
       
       
       
       
    • Por xRafaah
      Boa tarde,
      Estou fazendo algumas adaptações em um código que já está rodando normalmente. O que eu quero fazer é o seguinte:
      Eu já tenho o formulário com os inputs e ele já ta cadastrando os dados normalmente, porém eu adicionei o input "vencimento" do tipo data no meu formulário. Agora, eu não estou conseguindo incluir ele na parte do PHP para de fato ele cadastrar no mysql o valor desse input.
       
      Segue o código php:
      <?php require_once dirname(__FILE__).'/../consultas/sqlDocumento.php'; ob_start(); $operacao=new documento(); if(isset($_REQUEST['fltr'])){ $filtroPesquisa=$_REQUEST['fltr']; } if(isset($_SESSION['idUsuario'])){ $idUsuario=$_SESSION['idUsuario']; } if(isset($_SESSION['idPerfil'])){ $idPerfilUsuario=$_SESSION['idPerfil']; } if(isset($_REQUEST['acao'])){ $acao=$_REQUEST['acao']; } if(isset($_GET['acao'])){ $acao=$_GET['acao']; } if(isset($_REQUEST['codigo'])){ $idDocumento=$_REQUEST['codigo']; $dataArquivo=$_REQUEST['data']; $nomeArquivo=$_REQUEST['nome']; } if($acao=="listarDocumento"){ /* Páginação de resultado*/ if(isset($filtroPesquisa)){ $_SESSION['limiteDePaginas']=ceil ($operacao->contarRegistrosPaginacaoResultado($acao,$_SESSION['idUsuario'],$_SESSION['idPerfil'],$filtroPesquisa)/$operacao->resultadosPorPagina); } } if(isset($_REQUEST['pg'])){ $paginaAtual= $_REQUEST['pg']; } if(isset($_SESSION['limiteDePaginas']) and isset($paginaAtual)){ if($paginaAtual > $_SESSION['limiteDePaginas']){ /*Evita que a variável receba um valor diferente da quantidade real de páginas :) */ $paginaAtual=1; $_REQUEST['pg']=1; }// fim do if paginaAtual } if(isset($_REQUEST['pg'])){ $paginaAtual= $_REQUEST['pg']; } if(isset($_REQUEST['pg'])){ $numeroPagina=$_REQUEST['pg']; } if($acao=="cadastrarDocumento"){ $operacao->contaRegistrosTipoDoc(); $operacao->contaRegistrosNivelAcesso(); $operacao->listarTipoDocumento(); $operacao->listarNivelAcesso(); require('formCadastraDocumento.php'); }//fim do if if($acao=="gravarDocumento"){ $operacao->gravarDocumento(); } if($acao=="listarDocumento"){ if(!isset($numeroPagina)) $numeroPagina=0; if($numeroPagina <= 0){ $paginaAtual=1; $_REQUEST['pg']=1; }else{ $paginaAtual=$numeroPagina; } /* determina o limite de registros que será utilizado na consulta*/ $proximaPagina = ($paginaAtual * $operacao->resultadosPorPagina) - $operacao->resultadosPorPagina; $operacao->listarDocumento($idUsuario,$idPerfilUsuario,$proximaPagina,$operacao->resultadosPorPagina); require('formListaDocumento.php'); } if($acao=="excluirDocumento"){ $operacao->excluirDocumento($idDocumento,$dataArquivo,$nomeArquivo,$idUsuario,$idPerfilUsuario); } if($acao=="pesquisarDocumento"){ if(!isset($numeroPagina)) $numeroPagina=0; if($numeroPagina <= 0){ $paginaAtual=1; $_REQUEST['pg']=1; }else{ $paginaAtual=$numeroPagina; } $proximaPagina = ($paginaAtual * $operacao->resultadosPorPagina) - $operacao->resultadosPorPagina; $operacao->pesquisarDocumento($idUsuario,$filtroPesquisa,$_SESSION['idPerfil'],$proximaPagina,$operacao->resultadosPorPagina); require('formListaDocumento.php'); } ob_end_flush(); ?>  
       
      Se alguém tiver como dar uma força, eu agradeço muuito! =))
       
      Abraço.

    • Por Jéssica Gonsalves
      Olá, estou fazendo um programa q converta numeros em base decimal para bases de 5,7 e 9. Para isso, ao utilizar uma variavel r (resto), para as consecutivas divisões  do numero em 5,7 ou 9, não sei como enviar para uma unica variavel, essa sequencia de restos. Por exemplo, o numero convertido 437 fica 3222 em base 5 e são a sequencia dos restos das consecutivas divisões, porem, não consigo armazenar em uma unica variavel, não posso usar vetor ou outros comandos como chair. Basicamente, posso usar while, if e for. Em baixo está o começo do meu programa, falta bastante coisa e só coloquei a parte de conversão para base 5 (que claramente não esta funcionando). Obrigada desde já!!
       
      #include <stdio.h>
      int main ()
      { int n, i, num, a, r,b;

      printf ("Digite a quantidade n de numeros a serem convertidos:");
      scanf ("%d", &n);
      for (i=0; i<n; i++)
      {
          printf ("Digite um numero a ser convertido:");
          scanf ("%d", &b);
          for ( a=b, cont=0; a>=5; a=a/5,cont++)
              r=a%5;
          
      }
          printf ("%d na base 5 e' :%d",b,num);

      return 0;
      }
       
    • Por WallyWare
      Gostaria de saber como passar TODOS elementos dentro das <li> para uma outra pagina php, por exempo....
       
      A pagina estaria assim:
       
      <ul id="myUL"> <li>Hit the gym</li> <li class="checked">Pay bills</li> <li>Meet George</li> <li>Buy eggs</li> <li>Read a book</li> <li>Organize office</li> </ul>  
      Quando eu apertasse em um botão submit , queria que aparecesse/imprimisse isso:
       
      Hit the gym Pay bills Meet George Buy eggs Read a book Organize office  
      Não sei se deu pra entender, mas se puderem me ajudar fico muito agradecido.
       
×

Informação importante

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