[firebase-br] Procedure com WHERE dinâmico

Fausto fausto.s.a em uol.com.br
Seg Set 14 07:24:35 -03 2009


Em 11/09/2009 09:47, bvrenato escreveu:
> Bom dia colegas..
>
> Estou precisando implementar uma SP onde a cláusula WHERE seja montada
> dinâmicamente conforme os parâmetros que forem passados pela aplicação.
>
> A idéia é a seguinte:
> Tenho uma tabela TPROCESSOS, contendo os campos:
> dtregistro,
> dtliberacao,
> dtvistoria,
> dtprotocolo,
> dtlancamento,
> parametro (valores: P1-Em Analise, P2-Liberados, P3-Bloqueado),
> ...
>
> Na minha aplicação eu passo os seguintes parâmetros para a SP):
>
> a) O tipo de ocorrência que desejo (O1-Registro, O2-Liberação, O3-Vistoria,
> ...). Aqui é passado o valor do ItemIndex do radioGroup como parâmetro;
>
> b) O intervalo de data (De... Até...). Este é o intervalo de data de registro da
> Ocorrência (item a). Aqui são passados os valores de mskInicio e mskTermino
> (ambos maskEdit) como parâmetro para a SP;
>
>
> c) A parametrização dos registro que desejo (Z1-Todos os processos, Z2-Somente
> Registrados, Z3-Os Registrados e Vistoriados, Z4-Os Vistoriados e Não
> Liberados, Z5-...). Aqui é passado o valor do ItemIndex do radioGroup como
> parâmetro;
>
> OBS: Podem haver processos que foram Registrados e ainda nao Liberados, ou ainda
> nao Analisados, etc. Oq vai me indicar estes casos será a existencia, ou não, de
> uma data no respectivo campo.
>
> Estou montando a cláusula WHERE dentro da SP conforme os parâmetros passados,
> porém minha dificuldade está na montagem do WHERE, uma vez que o cruzamento dos
> parâmetros PX com ZX apresentam-se, de certa forma, como um plano cartesiano
> onde todas as combinações são possíveis.
> Preciso, então, saber como montar esta estrutura WHERE dentro da SP.
>
> Eu criei uma variável varchar na cláusula AS, montei a instrução para o WHERE
> nessa variável mas não funcionou.
> Dei uma olhada na instrução EXECUTE BLOCK, mas pelo que entendi ele não se
> aplica ao meu caso.
>
> Alguém poderia me dar uma luz ? Estou agarrado no meu projeto por causa disso.
>
> Grato
>
> Renato Vasconcellos
>
Um exemplo que creio que servirá para o que quer, basta alterá-lo para 
sua necessidade.
MinhaTbl:
Codigo(integer)
Nome(varchar(40))
Nascto (date)
Telefone(char(10))
Data(Date)
Tipo(char(1))
suponhamos que eu possa montar um where recebendo qualquer um dos 3 
campos acima como parametros, ou apenas um de cada vez...
SELECT MT.CODIGO,MT.NOME,MT.NASCTO,MT.TELEFONE,MT.DATA,MT.TIPO
FROM MINHATBL MT
*WHERE (CODIGO = COALESCE(:CD,MT.CODIGO))*
*  AND (DATA   = COALESCE(:DT,MT.DATA))*
*  AND (TIPO   = COALESCE(:TP,MT.TIPO))*
Importante lembrar que neste caso não é utilizado indices.

-- 
Fausto Alves
Skype:faustoalves
msn:faustoalves em com4.com.br
Franca-SP
Enviado pelo Mozilla Thunderbird
http://br.mozdev.org/thunderbird





Mais detalhes sobre a lista de discussão lista