Fórum Alterar trigger dentro de outra trigger #503024

01/12/2014

0

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

Responder

Posts

03/12/2014

Hugo

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+
Responder

Gostei + 0

05/12/2014

Everton Carlesso

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.
Responder

Gostei + 0

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

Aceitar