On a DB2 (version 9.5) the SQL statement
SELECT o.Id FROM Table1 o, Table2 x WHERE [...] FOR UPDATE WITH RR
gives me the erro
First, for having isolation level READ_COMMITTED
you do not need to specify WITH RR
, because this results in the isolation level SERIALIZABLE
. To specify WITH RS
(Read Stability) is enough.
To propagate the FOR UPDATE WITH RS
to the inner select you have to specify additionally USE AND KEEP UPDATE LOCKS
.
So the complete statement looks like this:
SELECT t.Id FROM Table t WHERE t.Id IN (
SELECT o.Id FROM Table1 o, Table2 x WHERE [...]
) FOR UPDATE WITH RS USE AND KEEP UPDATE LOCKS
I made some tests on a DB2 via JDBC and it worked without deadlocks.