Fórum multiplos triggers #37080

09/06/2003

0

Como faço multiplos triggers de uma vez só :?:


Araujo

Araujo

Responder

Posts

19/06/2003

Afarias

> Como faço multiplos triggers de uma vez só

Se vc quer dizer, uma única Trigger que que dispara com INSERT, DELETE ou UPDATE, são chamadas ´triggers universais´ -- se não me engano, só existem no Firebird 1.5 (ou superior) -- exemplo da sintaxe:


CREATE TRIGGER nome_trigger
FOR nome_tabela BEFORE INSERT OR UPDATE OR INSERT
AS BEGIN
...
END

e vc pode usar (INSERTING/UPDATING/DELETING) para checar qual o evento disparou a trigger:

if (INSERTING) then
new.Tipo = ´I´;
else
new.Tipo = ´U´;


Responder

Gostei + 0

17/03/2006

Alexandre_torres

Amigo, só complementando o que nosso amigo afarias disse:

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

Tome como base este exemplo a adapte as suas necessidades.

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

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.

espero ter ajudado.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar