Comment faire un SELECT FOR UPDATE” avec une condition sur plusieurs tableaux sur une base de données DB2?

Problème

Sur une base de données DB2 (version 9.5) l'instruction SQL

SELECT o.Id FROM Table1 o, Table2 x WHERE [...] FOR UPDATE WITH RR

me donne le message d'erreur SQLSTATE=42829 (La clause FOR UPDATE n'est pas autorisée, car la table spécifiés par le curseur ne peut pas être modifié).

Informations supplémentaires

J'ai besoin de spécifier WITH RR, parce que je suis en cours d'exécution sur le niveau d'isolation READ_COMMITTED, mais j'ai besoin de ma requête à bloc alors qu'il y est un autre processus qui exécute la même requête.

Solution pour l'instant...

Si je à la place de la requête comme ceci:

SELECT t.Id FROM Table t WHERE t.Id IN (
    SELECT o.Id FROM Table1 o, Table2 x WHERE [...]
) FOR UPDATE WITH RR

tout fonctionne bien.

Nouveau problème

Mais maintenant, je reçois parfois impasse des exceptions lorsque plusieurs processus exécuter cette requête simultanément.

Question

Est-il un moyen de formuler les FOR UPDATE de la requête, sans l'introduction d'un endroit où un blocage peut se produire?

OriginalL'auteur tangens | 2010-10-07