Fórum Não consigo fazer esta consulta !?!?! #471370

26/02/2014

0

Bom dia amigos

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

Silvio Morelo

Responder

Posts

09/03/2014

Vinicius Cruz

E se você fizesse isto no software mesmo? por exemplo, seu programa pediria ao firebird uma consulta por vez e iria guardando as informações retornadas no software e depois é só tratar elas. Só uma ideia mesmo de repente ajuda. Abraço.
Responder

Gostei + 0

10/03/2014

Luiz

É para tratar no software fica mais fácil, mas você não precisa fazer várias consultas ... você pode fazer por exemplo:

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..
Responder

Gostei + 0

10/03/2014

Marisiana Battistella

Bom dia!

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ável


Já utilizei essa solução programando no Delphi e o banco de dados era Oracle...
Pode ser que resolva teu problema.

Responder

Gostei + 0

10/03/2014

Alex Lekao

Ola Boa tarde!!!

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
Responder

Gostei + 0

24/03/2014

Thiago Irrazabal

Bom dia, acredito que tu ainda não chegou a uma solução! ... ?

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.
Responder

Gostei + 0

24/03/2014

Silvio Morelo

Obrigado a todos pela dica, analisando cada resposta consegui criar a consulta.

[]'s

Responder

Gostei + 0

24/03/2014

Alex Lekao

Ola...

Obrigado por retornar.

Abraco.

Alex - Lekao
Responder

Gostei + 0

24/03/2014

Marisiana Battistella

Que bom!
Também agradeço pelo retorno!
Responder

Gostei + 0

24/03/2014

Deivison Melo

Finalizando o tópico!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar