Условие триггера во всех строках - PullRequest
0 голосов
/ 26 февраля 2012

Я пытаюсь внедрить систему точного контроля трафика.Когда радиолокационное наблюдение вводится в таблицу OBSERVACION, триггер должен проверить, есть ли строка с наблюдением над той же машиной, а затем рассчитать штраф.каждый ряд таблицы.Я имею в виду, я хочу, чтобы условие триггера проверило все значения в таблице и выяснило, совпадает ли одно из них с введенным значением NEW.Примерно так:

WHEN(NEW.fecha_foto = fecha_foto)AND...

Где fecha_foto - любое значение в таблице.

Возможно ли это?

Спасибо.

1 Ответ

1 голос
/ 27 февраля 2012

Триггер, который выдает DML (включая SELECT) для той же таблицы, которая владеет триггером, вызывает призрак ORA-4091, исключение мутирующей таблицы.Oracle выдает эту ошибку, потому что ожидает, что результат транзакции будет детерминированным, и триггер, который выдает DML на своей собственной таблице, вносит неопределенность в процедуры.

Таблица мутаций является надежным индикатором плохого дизайна, в частности, плохогомодель данных, и это, кажется, имеет место здесь.

Если величина штрафа зависит от результата одного наблюдения, тогда FINE может быть столбцом в таблице OBSERVACION.Однако ваши бизнес-правила указывают, что значение может зависеть от нескольких наблюдений, если они попадают в определенный период.В этом случае штраф должен быть в отдельной таблице.Вам потребуется внешний ключ между OBSERVACION и MULTA, чтобы указать, какие наблюдения покрываются конкретным штрафом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...