[firebase-br] RES: RES: RES: RES: Otimizar Where
Felix - Sol Informática
felix em soltecnologia.com.br
Ter Dez 20 11:31:52 -03 2011
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
Mais detalhes sobre a lista de discussão lista