försök:
select .....
from <choose your table>
where id in (<your join query here>) for UPDATE;
REDIGERA :det kan verka lite kontraintuitivt med tanke på frågan du länkade till (som frågade hur man undviker en IN
), men kan fortfarande ge fördelar om din anslutning returnerar en begränsad uppsättning. Det finns dock ingen lösning:orakelundantaget är ganska självförklarande; oracle vet inte vilka rader som ska låsas på grund av DISTINCT
. Du kan antingen utelämna DISTINCT
eller definiera allt i en vy och sedan uppdatera den, om du vill, utan det explicita låset: http://www.dba-oracle.com/t_ora_02014_cannot_select_for_update.htm