Fórum Não consigo fazer esta consulta !?!?! #471370
26/02/2014
0
Espero conseguir explicar minha duvida que é a seguinte:
Quero trazer na consulta todos os cadastro que possuam determinados códigos:
Ex: 2, 4, 15, 56 e 57 somente. (integer)
Até aí beleza,
WHERE CODIGO IN (2, 4, 15, 56, 57)
Mas a dificuldade está que preciso que receba os valores que o usuário escolher. É uma consulta personalizável, a qual o usuário escolhe na tela quais códigos ele quer.
Tentei com parâmetro: WHERE CODIGO IN (:CODIGOS)
Mas nada feito, firebird aceita apenas um valor por vez.
Procurei por array no firebird, mas o que encontrei até agora não consegui entender direito.
Gostaria de saber se alguém já montou algo parecido, ou se tem alguma ideia de como solucionar esse caso.
Agradeço desde já a atenção.
[]s
Silvio Morelo
Curtir tópico
+ 0Posts
09/03/2014
Vinicius Cruz
Gostei + 0
10/03/2014
Luiz
where codigo = 1
or
codigo = 2
or
codigo = 3
faça um loop que ira adicionando as linhas de comando ... por exemplo,
select bla bla bla
where codigo = 1 //primeiro codigo
enquanto houver codigo (diferente do primeiro)
sql.add (or codigo = variavel_codigo)
fim do laço
executa a sql..
Gostei + 0
10/03/2014
Marisiana Battistella
Uma alternativa, seria criar uma variável na aplicação que armazena essa linha da instrução SQL e enviar ela pro SQL que será excutado, por exemplo:
Na aplicação, vc vai criar uma varíavel que conterá "WHERE CODIGO IN (2, 4, 15, 56, 57)", assim você pode concatenar os valores na aplicação...
No sql que você vai executar vc incluirá a variável, por exemplo:
select *
from nome_tabela
nome_variávelJá utilizei essa solução programando no Delphi e o banco de dados era Oracle...
Pode ser que resolva teu problema.
Gostei + 0
10/03/2014
Alex Lekao
Acredito que o tratamento tera que ser feito na aplicacao mesmo, ajustas a relacao para que seja o esperado na consulta.
Acho que a sugestao da Marisiana a seja a mais adequada e simples para se fazer.
Se vc for usar o campo direto de utilizacao do usuario ficara complicado, que vc tera que forcar o ususario a fazer a digitacao na estrutura que vc precisa.
Aqui na empresa a nossa aplicacao requaer que seja feita em uma estrutura similar a que sera utilizada no banco e a aplicacao de qqr forma converte para a estrutura esperada.
Por exemplo para o IN o campo que tera que contar o IN nos digitamos na aplicacao separado por barras(/) e a aplicacao converte cada barra pelas aspas e virgulas que forem necessarias, assim forcamos o usuario a passar um parametro proximo do que precisamos e conseguimos converter para o necessario.
Espero ter ajudado.
Abraco.
Alex - Lekao
Gostei + 0
24/03/2014
Thiago Irrazabal
Por que tu não cria uma procedure e passa os códigos por parâmetro?
Criei um exemplo simples com uma tabela que tenho aqui, segue ele:
SET TERM ^ ;
CREATE PROCEDURE SP_TESTE (
CODIGOS VARCHAR(500))
RETURNS (
COD_CADPRODUTO INTEGER,
CODIGO INTEGER,
NOME VARCHAR(120))
AS
DECLARE VARIABLE SQL BLOB SUB_TYPE 1 SEGMENT SIZE 120;
BEGIN
SQL = 'SELECT COD_CADPRODUTO, CODIGO, NOME FROM CAD_PRODUTO'
||' WHERE CODIGO IN ('
||' '||:CODIGOS||')';
FOR EXECUTE STATEMENT SQL INTO
:COD_CADPRODUTO, :CODIGO, :NOME DO
SUSPEND;
END^
SET TERM ; ^
Depois de criada aperta F9 para rodar e passe os parâmetros que desejar nessa forma: '2', '4', '15', '56', '57'.
Att,
Thiago Irrazabal de Oliveira.
Gostei + 0
24/03/2014
Silvio Morelo
[]'s
Gostei + 0
24/03/2014
Alex Lekao
Obrigado por retornar.
Abraco.
Alex - Lekao
Gostei + 0
24/03/2014
Marisiana Battistella
Também agradeço pelo retorno!
Gostei + 0
24/03/2014
Deivison Melo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)