[firebase-br] RES: RES: RES: RES: Otimizar Where

Magno System magno em speet.com.br
Ter Dez 20 13:21:45 -03 2011


Sim, mas daí são dois select's que o FIREBIRD terá que fazer internamente na 
PROCEDURE.



Software House Magno System
Site: www.magnosystem.com.br
Email: magno em speet.com.br
Tel.: (35)3371-2337 / (35) 9129-7634
----- Original Message ----- 
From: "Felix - Sol Informática" <felix em soltecnologia.com.br>
To: "'FireBase'" <lista em firebase.com.br>
Sent: Tuesday, December 20, 2011 11:31 AM
Subject: [firebase-br] RES: RES: RES: RES: Otimizar Where


Resolvido com procedure (mas dá no mesmo fazendo na aplicação, ou seja,
executar o segundo select somente quando o primeiro não localizar):

SET TERM ^ ;
CREATE PROCEDURE SELECT_VEICULO (PTEXTO Varchar(50) )
RETURNS (
    XPLACA Char(7),
    XAUTOMOVEL Varchar(50),
    XPROPRIETARIO Varchar(50) )
AS
DECLARE VARIABLE YPLACA Char(7);
DECLARE VARIABLE YAUTOMOVEL Varchar(50);
DECLARE VARIABLE YPROPRIETARIO Varchar(50);
BEGIN
   yPlaca        = '';
   yAutomovel    = '';
   yProprietario = '';

   select all veiculo.placa, veiculo.AUTOMOVEL, cadastro.nome
      from veiculo inner join cadastro on veiculo.cb = cadastro.CB
      where veiculo.placa = :ptexto
      into :yPlaca, :yAutomovel, :yProprietario;

   if (yPlaca = '') then
   begin
      for
         select all veiculo.placa, veiculo.AUTOMOVEL, cadastro.nome
            from veiculo inner join cadastro on veiculo.cb = cadastro.CB
            where veiculo.AUTOMOVEL containing :ptexto or cadastro.nome
containing :ptexto
            into :xPlaca, :xAutomovel, :xProprietario
      do
      suspend;
   end
   else
   begin
      xPlaca        = yPlaca;
      xAutomovel    = yAutomovel;
      xProprietario = yProprietario;
      suspend;
   end

END^

Chamada da procedure como no exemplo:
SELECT p.XPLACA, p.XAUTOMOVEL, p.XPROPRIETARIO FROM SELECT_VEICULO('FELIX')
p

Poderá me retornar 1 só registro (achou exatamente a placa OU apenas 1
registro satisfazia a condição da busca pelo nome do veículo ou do
proprietário) ou vários (não achou a placa, o texto informado é compatível
com vários automóveis / proprietários).

Daí basta colocar na aplicação a janela de seleção do registro quando houver
um retorno múltiplo.

Fco. Felix
www.soltecnologia.com.br


______________________________________________
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