[firebase-br] Incrementar Generator na Trigger After Insert

Eduardo Bahiense eduardo em icontroller.com.br
Ter Dez 19 20:22:41 -03 2006


Olá

Vou dar alguns palpites:

1. Concordo com quem disse para não se preocupar com uma eventual 
seqüência descontinuada por se "queimar" um generator.
2. As chances de dois usuários inserirem o código 0 ao mesmo tempo, são 
enormes, se existirem apenas 2 usuários. Se forem mais de 2, sempre 
acontecerá. (Sim, as leis de Murphy foram gravadas em todas as bios de 
todos os computadores)
3. Basear a lógica em deixar acontecer uma exceção, embora tecnicamente 
viável, deve ser evitado sempre que possível (melhor não deixar 
acontecer o erro).
4. Se vc já se conforma em fazer em duas etapas, então quem sabe uma 
estratégia com 2 generators não funcionaria?

CREATE TRIGGER CLIENTES_BI FOR CLIENTES
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
     IF NEW.CODIGO IS NULL --JUST IN CASE
        OR NEW.CODIGO = 0 THEN
           NEW.CODIGO = GEN_ID(GEN_TEMPORARIO,1); -- evita violação
END

CREATE TRIGGER CLIENTES_AI FOR CLIENTES
ACTIVE AFTER INSERT POSITION 0
AS
BEGIN
      UPDATE CLIENTES SET CODIGO = GEN_ID(GEN_CLIENTES_ID,1)
      WHERE CODIGO = NEW.CODIGO -- isto foi atribuido antes, então...
END

Acho que assim fecha todas, mas não testei.

Abs, Eduardo





Mais detalhes sobre a lista de discussão lista