Alterar trigger dentro de outra trigger

Firebird

01/12/2014

Tenho a seguinte situação: tenho uma tabela de estoque de produtos (ESTOQUE_PROD) e uma tabela de estoque de matéria-prima (ESTOQUE_MAT), preciso que ao atualizar qualquer uma das tabelas a outra tbm atualize, ex: ao atualizar o estoque de um produto atualize tbm o estoque da matéria-prima referente ao produto e vice versa.
Para isso criei uma trigger em cada tabela, quando atualizo a tabela ESTOQUE_PROD a trigger atualiza tbm a tabela ESTOQUE_MAT e vice versa, porém, isso faz com que o sistema fique em looping, um atualizando o outro sempre.
Tive a ideia de desabilitar a trigger antes de fazer o update e habilitar depois do update, porem o firebird não aceita a palava chave ALTER dentro da trigger.
Segue a trigger da tabela de ESTOQUE_PROD:
CREATE TRIGGER ESTOQUE_ATU_MATP FOR ESTOQUE_PROD
ACTIVE AFTER UPDATE POSITION 0
AS
begin
   --desabilitar a trigger da tabela ESTOQUE_MAT para não entrar em looping
   alter trigger estoque_atu_prod inactive;
           
   --atualizar estoque de matéria-prima
   update ESTOQUE_MAT set quant = new.q1 where referencia = new.referencia;
            
   --habilitar a trigger da tabela materiapest
   alter trigger estoque_atu_prod active;
        
end
end


Alguém sabe o que devo fazer?
Everton Carlesso

Everton Carlesso

Curtidas 0

Respostas

Hugo

Hugo

01/12/2014

Boa tarde amigo,

Tente usar variáveis de contexto, algo como...

numa trigger vc preenche a variavel assim:

 rdb$set_context('USER_TRANSACTION', 'NAO_EXECUTA_TRIGGER', 1); 


e na outra vc testa se a variavel de contexto está preenchida

  if (rdb$get_context('USER_TRANSACTION', 'NAO_EXECUTA_TRIGGER') is null) then
    --alguma coisa


acredito que dessa forma é possível resolver o seu problema...

nesses links tem uma explicação melhor de como funciona as variáveis de contexto...

[url]http://www.firebirdsql.org/refdocs/langrefupd20-get-context.html[/url]
[url]http://www.firebirdsql.org/refdocs/langrefupd25-intfunc-set_context.html[/url]

espero ter ajudado...

t+
GOSTEI 0
Everton Carlesso

Everton Carlesso

01/12/2014

Boa tarde Hugo. obrigado pela resposta, já consegui resolver, fiz mais ou menos desse jeito que vc disse, mas não usei essa variavel de contexto, usei um campo na tabela mesmo para verificar se pode alterar ou não.
GOSTEI 0
POSTAR