multiplos triggers
Como faço multiplos triggers de uma vez só :?:
Araujo
Curtidas 0
Respostas
Afarias
09/06/2003
> 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´;
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´;
GOSTEI 0
Alexandre_torres
09/06/2003
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.
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.
GOSTEI 0