Задача
В DB2 (версия 9.5) оператор SQL
SELECT o.Id FROM Table1 o, Table2 x WHERE [...] FOR UPDATE WITH RR
дает мне сообщение об ошибке SQLSTATE=42829
(предложение FOR UPDATE недопустимо, поскольку таблица, указанная курсором, не может быть изменена).
Дополнительная информация
Мне нужно указать WITH RR
, потому что я работаю на уровне изоляции READ_COMMITTED
, но мне нужно заблокировать мой запрос, когда другой процесс выполняет тот же запрос.
Решение до сих пор ...
Если я вместо этого сделаю запрос следующим образом:
SELECT t.Id FROM Table t WHERE t.Id IN (
SELECT o.Id FROM Table1 o, Table2 x WHERE [...]
) FOR UPDATE WITH RR
все отлично работает.
Новая проблема
Но теперь я иногда получаю исключения взаимоблокировок, когда несколько процессов выполняют этот запрос одновременно.
Вопрос
Есть ли способ сформулировать запрос FOR UPDATE
без указания места, где может возникнуть тупик?