[firebase-br] Dúvida...
Edson T. Marques
marques em oriontec.com.br
Seg Fev 14 09:01:14 -03 2005
"Meu POVO e minha POVA..."
Tudo em cima!?!?
Negócio é o seguinte:
Vou dar uma dica direto do nosso banco de dados, espero que isso possa
ajudar:
Isso existe no nosso banco há anos e funciona bem:
create procedure sp_Pessoa_ChaveVaga (Apartir VARCHAR(10))
returns(Vago VARCHAR(10))
as
declare variable ChaveLocal INTEGER;
declare variable Comparador INTEGER;
begin
Comparador = Cast (Apartir as INTEGER);
for select Cast(CHAVEPES as INTEGER) from PESSOA where Cast(CHAVEPES
as INTEGER) >= :Comparador order by CHAVEPES into :ChaveLocal do
begin
if (ChaveLocal <> Comparador) then
begin
Vago = Cast(Comparador as VARCHAR(10);
SUSPEND;
EXIT;
end
Comparador = Comparador + 1;
end
SUSPEND
end^
Este procedimento foi originalmente escrito para tratar INTEGER assim:
CREATE PROCEDURE SP_PESSOA_CHAVEVAGA ( APARTIR INTEGER)
RETURNS ( VAGO INTEGER)
AS
DECLARE VARIABLE CHAVELOCAL INTEGER;
BEGIN
Vago = Apartir;
for select ChavePes from Pessoa
where ChavePes >= :Apartir
order by ChavePes
into :ChaveLocal do
begin
if (ChaveLocal <> Vago) then
begin
SUSPEND;
EXIT;
end
Vago = Vago + 1;
end
SUSPEND;
END ^
O parâmetro é usado por quem GRAVA a ultima chave sugerida e, assim,
pode passá-la como parâmetro para reduzir a busca.
Té mais;
Edson
Robert Nunes escreveu:
>Primeiramente Bom Dia..
>
>Bom galera estou com uma dúvida na criação de uma procedure.
>a dúvida é a seguinte:
>
>Tenho uma tabela de Clientes, dentro dela tenho o campo Codigo que é do tipo
>String,
>nessa procedure eu presciso que ela me retorne o maior codigo pra eu
>acrescentar + 1 pra mim usar com sugestão no meu cadastro de Clientes, o
>problema é que o campo é do tipo String, então eu tentei fazer um select e
>mandei ordenar de maneira decrescente e assim eu retornaria o primeiro mas
>não deu certo exemplo:
>
>create procedure ProximoCodClienteNovo
>returns(OidCliente Integer)
>as
>begin
> select Codigo
> from Cliente
> order by Codigo desc
> into :OidCliente;
>
> if (oidcliente is null) then
> oidcliente = 1;
> else
> oidcliente = oidcliente + 1;
>end
>
>mas aí ele se perde pois ficaram multiplos registros na sobra...
>alguém tem alguma sugestão pra que eu retorne o maior valor pra ser segerido
>no meu cadastro
>
>desde já fico grato
>
>[]'s Robert Nunes.
>
>
>
>
>______________________________________________
>FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>
>
>
>
Mais detalhes sobre a lista de discussão lista