Como executar um "SELECT FOR UPDATE" seguro com uma condição WHERE em várias tabelas em um DB2?
Em um DB2 (versão 9.5), a instrução SQL
SELECT o.Id FROM Table1 o, Table2 x WHERE [...] FOR UPDATE WITH RR
me dá a mensagem de erroSQLSTATE=42829
(A cláusula FOR UPDATE não é permitida porque a tabela especificada pelo cursor não pode ser modificada).
Eu preciso especificarWITH RR
, porque estou executando no nível de isolamentoREAD_COMMITTED
, mas preciso que minha consulta seja bloqueada enquanto houver outro processo executando a mesma consulta.
Se, em vez disso, eu fizer uma consulta assim:
SELECT t.Id FROM Table t WHERE t.Id IN (
SELECT o.Id FROM Table1 o, Table2 x WHERE [...]
) FOR UPDATE WITH RR
tudo funciona bem.
Novo problemaMas agora, ocasionalmente, recebo exceções de conflito quando vários processos executam essa consulta simultaneamente.
Pergunta, questãoExiste uma maneira de formular oFOR UPDATE
consulta sem introduzir um local onde um conflito pode ocorrer?