Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ORACLE após o gatilho de atualização:resolvendo o erro da tabela de mutação ORA-04091


"Existe alguma maneira de evitar o erro de tabela mutante sem usar uma tabela temporária para valores ou uma transação autônoma?"

tl;dr não.

O erro de tabela mutante é causado pela consulta da tabela que possui o gatilho ou tabelas que estão envolvidas em um relacionamento de chave estrangeira com a tabela proprietária (pelo menos em versões mais antigas do banco de dados, não tenho certeza se ele ainda é obtido).

Em um aplicativo projetado adequadamente, isso não deve ser necessário. É por isso que muitas pessoas consideram as tabelas mutantes como um indicador de modelagem de dados ruim. Por exemplo, a mutação é frequentemente associada à normalização insuficiente.

Parafraseando Jamie Zawinski:Algumas pessoas, quando confrontadas com uma exceção de tabela mutante, pensam "Eu sei, vou usar transações autônomas". Agora eles tem dois problemas.

Às vezes, o erro pode ser evitado simplesmente modificando os valores :NEW em um gatilho BEFORE INSERT OR UPDATE ou usando colunas virtuais. Mas você precisará postar mais detalhes para ver se eles se aplicam.

Mas a melhor solução é não precisar de nenhum outro tipo.