[firebase-br] Controle de ID sem generator

HPensador hpensador em gmail.com
Qui Out 30 15:22:23 -03 2008


Boa tarde Colegas!

Na thread do TClientDataSet + Generator respondi que não utilizava 
generator mais sim um método próprio que gerava a nova chave para mim. O 
colega Sandro levantou a questão de como eu estava fazendo o controle de 
insersões simultâneas. Eu não faço nenhum tratamento e para minha sorte 
até o presente momento não tive nenhum problema. Vou colocar abaixo o 
código do método (procedure) e a idéia por trás da mesma e caso algum 
colega tenha alguma idéia/sugestão de melhoria para o mesmo, manda aí..

Tenho uma tabela (Controle_ID) com a seguinte estrutura:

Controle_ID (
   Tabela varchar(30),
   id_atual integer
)

e a seguinte SP

CREATE PROCEDURE NOVO_CODIGO (
     tabela varchar(30))
returns (
     proximo_codigo integer)
as
declare variable codigo_atual integer;
begin
   --Recupera o valor atual do código
   select id_atual from controle_id c
   where (c.tabela = :tabela)
   into :codigo_atual;

   --Verifica se o valor do código é nulo
   if (:codigo_atual is null) then
   begin
     proximo_codigo = 1;
     insert into controle_id (tabela, id_atual)
     values (:tabela, :proximo_codigo);
   end
   else
   begin
     proximo_codigo = codigo_atual + 1;
     update controle_id set id_atual = :proximo_codigo
     where (tabela = :tabela);
   end
suspend;
end





Mais detalhes sobre a lista de discussão lista