Wie mache ich eine sichere SELECT FOR UPDATE-Anweisung mit einer WHERE-Bedingung für mehrere Tabellen auf einem DB2?

Proble

Auf einem DB2 (Version 9.5) die SQL-Anweisung

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

gibt mir die FehlermeldungSQLSTATE=42829 (Die FOR UPDATE-Klausel ist nicht zulässig, da die vom Cursor angegebene Tabelle nicht geändert werden kann.)

Zusätzliche Informatio

Ich muss @ angebWITH RR, weil ich auf Isolationsstufe laufeREAD_COMMITTED, aber ich muss meine Abfrage blockieren, während ein anderer Prozess dieselbe Abfrage ausführt.

Lösung bisher ...

Wenn ich stattdessen so frage:

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

alles funktioniert gut.

Neues Problem

Aber jetzt erhalte ich gelegentlich Deadlock-Ausnahmen, wenn diese Abfrage von mehreren Prozessen gleichzeitig ausgeführt wird.

Frag

Gibt es eine Möglichkeit, das @ zu formuliereFOR UPDATE Abfrage ohne Angabe einer Stelle, an der ein Deadlock auftreten kann?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage