[firebase-br] Codigo vago
Cleber Luiz da Silva
cleber.cls em gmail.com
Sex Fev 13 20:04:55 -03 2009
Augusto Junior,
Primeiramente estou supondo que nessa tabela esse campo do tipo char(6) seja
a chave-primário, ou pelo menos uma chave única.
Caso não queira usar uma store procedure, pode usar algo do tipo, no lugar
de uma sql:
execute block
returns (ProximaSequencia char(6))
as
declare variable Sequencia bigInt default 0;
declare variable valorAtual bigInt default 0;
declare selecionaSequencias cursor for (
select a.sequencia from sequencias a order by a.sequencia);
begin
open selecionaSequencias;
while (1=1) do
begin
Sequencia = Sequencia + 1;
fetch selecionaSequencias into valorAtual;
if (valorAtual <> Sequencia) then
begin
ProximaSequencia = Sequencia;
leave;
end
end
close selecionaSequencias;
suspend;
end
Caso prefira usar uma store procedure - eu recomento:
create or alter procedure ObterProximaSequenciaVaga
returns (
proximasequencia char(6))
as
declare variable sequencia bigint;
declare variable valoratual bigint;
declare selecionasequencias cursor for (select a.sequencia from sequencias
a order by a.sequencia);
begin
open selecionaSequencias;
while (1=1) do
begin
Sequencia = Sequencia + 1;
fetch selecionaSequencias into valorAtual;
if (valorAtual <> Sequencia) then
begin
ProximaSequencia = Sequencia;
leave;
end
end
close selecionaSequencias;
suspend;
end
agora se pretende usar usar isso em situaçães de uso concorrente, é melhor
usar alguma outra técnica.
Pesquise algo sobre "Seqüência sujeita a Auditoria".
Fiz algo parecido em um controle de impressão de NFs. Até hoje não tive
problema algum com seqüências vagas ou erros gerados em acesso concorrente.
----- Original Message -----
From: "Augusto junior" <gutopj02 em gmail.com>
Newsgroups: gmane.comp.db.firebase.portuguese
To: "FireBase" <lista em firebase.com.br>
Sent: Thursday, February 12, 2009 6:36 PM
Subject: [firebase-br] Codigo vago
Tenho um cadastro onde existe um campo char(6) ... esse campo guarda um
valor numerico com zeros a esquerda..
000001
000002
000003
000004.....
acontece que esse campo o cliente que define o valor do mesmo.... e colocado
manualmente... e sempre sendo um valor unico...
agora ele me pediu para ter uma opcao de o sistema informar um numero vago
....
fiz isso usando um contador numerico que vai incrementando em um looping
... e a cada incremento faco a busca usando locate para
ver se ja existe ou nao ..
funcionou perfeitamente ... mas a lentidao do locate desanima...
existe alguma forma de fazer um sql que retorne o primeiro valor vago ?
Grato
Augusto
______________________________________________
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
"Augusto junior" <gutopj02 em gmail.com> escreveu
na mensagem
news:f3098c960902121236u264cab27h74ddd01485e9b98c em mail.gmail.com...
Tenho um cadastro onde existe um campo char(6) ... esse campo guarda um
valor numerico com zeros a esquerda..
000001
000002
000003
000004.....
acontece que esse campo o cliente que define o valor do mesmo.... e colocado
manualmente... e sempre sendo um valor unico...
agora ele me pediu para ter uma opcao de o sistema informar um numero vago
....
fiz isso usando um contador numerico que vai incrementando em um looping
... e a cada incremento faco a busca usando locate para
ver se ja existe ou nao ..
funcionou perfeitamente ... mas a lentidao do locate desanima...
existe alguma forma de fazer um sql que retorne o primeiro valor vago ?
Grato
Augusto
______________________________________________
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