[firebase-br] RES: Select IN

lazaro lazaro em usinaalvorada.com.br
Seg Maio 25 16:09:44 -03 2009


VOCE PODE FAZER UM SQL DINAMICO OU SEJA FAZ UM LOOP DENTRO DOS ITENS
SELECIONADOS E GERAR O SQL MAIS OU MENO ASSIM
AND(FROTA="A01")....
DESTA FORMA SEU SQL FICARIA MUITO MAIS RAPIDO QUE NO IN. 

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Mantovani
Enviada em: segunda-feira, 25 de maio de 2009 15:27
Para: lista em firebase.com.br
Assunto: Re: [firebase-br] Select IN

Sandro, obrigado pela ajuda,

Seguinte, eu realmente preciso passar com um IN, vou explicar.

Estou desenvolvendo um relatorio onde o usuario poderá selecionar na tela
quais frotas ele quer imprimir. Meu campo nrofrota é um string. Além do
problema da qtde de frota que ele pode selecionar, não estou conseguindo
passar como parametro para o sql varias string para formar o IN, problema
que eu resolveria se conseguisse jogar tudo em um tabela.

No oracle eu conseguiria resolver o problema como descrevi e que é +- o que
vc disse, a função retorna tipo uma tabela virtual.

O meu IN, seria +- isso ('A01','A02','B05'...)

Espero ter consiguido explicar.

"Sandro Souza" <escovadordebits em gmail.com> escreveu na mensagem
news:64d5939a0905251110k5510f4act8b200b3829f3405b em mail.gmail.com...
Bom dia/tarde Mantovani.

Grande Mantovani, para essa situação específica, você pode criar uma stored
procedure que lhe retorne uma "tabela virtual" que pode ser utilizada em um
SELECT como você deseja.

Nessa situação de ser um intervalo fechado de valores, você poderia utilizar
o operador BETWEEN, ou seja, o seguinte exemplo:

SELECT  *
FROM     TABELA
WHERE   CAMPO IN (   SELECT COLUMN_VALUE
                                   FROM
TABLE(cast(c5_ComplexIn.c5InTable('1,2,3,4 ATE 10000') as c5InStrTable)))
Poderia se tornar:

SELECT * FROM TABELA WHERE CAMPO BETWEEN 1 AND 10000

Veja se você pode utilizar operadores simples para filtrar. Caso necessite
realmente de uma stored procedure para isso, então posso lhe ajudar se você
especificar o que você informará e o que deseja que seja retornado.

Espero ter ajudado mais que atrapalhado. :D

2009/5/25 Mantovani <daniloatm em gmail.com>

> Boa tarde Pessoal,
>
> Já fiz essa pergunta anteriormente, mas não obtive resposta. Acho q 
> como estava no topido do Jhosef Marks muitos não viram.
>
> Bom, vamos lá, gostaria de saber se existe algum limite com relação a 
> qtde de informações dentro de um IN. Ex  IN (1,2,3,4 ATÉ 10000). No 
> Oracle se não me engano, existe uma limitação, então eu tenho uma UDF, 
> que pega o conteudo dentro do parentes e insere em uma tabela 
> temporaria.
>
> Exemplo Oracle:
> SELECT  *
> FROM     TABELA
> WHERE   CAMPO IN (   SELECT COLUMN_VALUE
>                                    FROM
> TABLE(cast(c5_ComplexIn.c5InTable('1,2,3,4 ATE 10000') as 
> c5InStrTable)))
>
> Gostaria de saber como tratar isto no firebird, se ja existe alguma 
> udf para fazer isso. Estou usando firebird 2.5.
>
> Desde já Agradeço.
> Mantovani.
>
>
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa









Mais detalhes sobre a lista de discussão lista