[firebase-br] LOG DO FIREBIRD

justiceiro punisher punisher-br em hotmail.com
Sex Set 1 12:49:51 -03 2006


fala ai amigo..... peguei isso outro dia na web

A partir da versão 1.5 do Firebird é possível que uma mesma trigger seja 
usada para Insert, Update e Delete ao mesmo tempo.

Foram criadas três novas variáveis que indicam o que disparou a trigger.

Estas variáveis são:
INSERTING -  Quando estiver inserindo
UPDATING -  Quando estiver atualizando
DELETING - Quando estiver deletando
(meio óbvio, não é ?).

Num exemplo prático:

CREATE TRIGGER VENDAS_BIUD FOR VENDAS
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 0
AS
BEGIN
  IF (INSERTING) THEN
     UPDATE PRODUTOS
     SET ESTOQUE = ESTOQUE - NEW.QUANT
     WHERE COD_PRODUTO = NEW.COD_PRODUTO;
  ELSE
     IF (DELETING) THEN
        UPDATE PRODUTOS
        SET ESTOQUE = ESTOQUE + VENDAS.QUANT
        WHERE COD_PRODUTO = VENDAS.COD_PRODUTO;
     ELSE
        IF (UPDATING) THEN BEGIN
           UPDATE PRODUTOS
           SET ESTOQUE = ESTOQUE + OLD.QUANT
           WHERE COD_PRODUTO = OLD.COD_PRODUTO;

           UPDATE PRODUTOS
           SET ESTOQUE = ESTOQUE - NEW.QUANT
           WHERE COD_PRODUTO = NEW.COD_PRODUTO;
        END
END

Neste exemplo temos uma tabela com vendas de produtos. A cada alteração na 
tabela devemos atualizar o estoque. Portanto, ao inserir uma venda devemos 
subtrair a quantidade vendida do estoque, ao deletar uma venda devemos 
devolver (somar) a quantidade ao estoque e ao editar o registro devemos 
devolver ao estoque o produto e quantidade anteriores e subtrair do estoque 
a nova quantidade do novo produto.

Uma só trigger resolve tudo. O que antes deveriam ser três triggers agora 
pode ser resumido em apenas uma.

_________________________________________________________________
Baixe agora o Windows Live Messenger! http://get.live.com/messenger/overview





Mais detalhes sobre a lista de discussão lista