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

Condição de gatilho em todas as linhas


Um gatilho que emite DML (incluindo SELECT) na mesma tabela que possui o gatilho gera o espectro de ORA-4091, a exceção de tabela mutante. A Oracle lança esse erro porque espera que o resultado de uma transação seja determinístico, e um gatilho que emita DML em sua própria mesa introduz incerteza nos procedimentos.

A tabela de mutação é um indicador confiável de design ruim, especificamente um modelo de dados ruim e esse parece ser o caso aqui.

Se o valor de uma multa depende do resultado de uma única observação, então não há problema em FINE ser uma coluna na tabela OBSERVACION. No entanto, suas regras de negócios indicam que o valor pode depender de várias observações, se elas se enquadrarem em um determinado período. Nesse cenário a multa deve ser em uma tabela própria. Você precisaria de uma chave estrangeira entre OBSERVACION e MULTA para indicar quais observações são cobertas por uma multa específica.