Поддерживать согласованность таблиц во время выполнения триггера? - PullRequest
0 голосов
/ 20 ноября 2011

У меня есть триггер, который проверяет еще пару таблиц, прежде чем разрешить вставку строки. Однако между временем, когда я проверяю другие таблицы и вставляю строку, другие таблицы могут обновляться.

Как обеспечить, чтобы проверяемые таблицы оставались в согласованном состоянии до тех пор, пока не будет вставлена ​​новая строка? Я думал о снятии блокировок, но все, что я прочитал, сводится к тому, что если вы не оставляете блокировку для Oracle, вы почти наверняка делаете это неправильно.

1 Ответ

2 голосов
/ 21 ноября 2011

Oracle уже делает это для вас, когда вы выполняете выборку, он просматривает все таблицы на момент начала транзакции (время первого DML).Это не остановит изменение данных под вами, хотя ваша транзакция просто не увидит их изменения.Если вы хотите остановить изменение этих данных, вы можете использовать «SELECT FOR UPDATE», как предлагает Джастин Кейв.

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

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