[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