[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