问题
在一个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
查询,而不会引入死锁可能发生的地方?