Esiste un modo per testare se una riga è stata bloccata per l'aggiornamento in Oracle?Come si controlla se una riga è bloccata per l'aggiornamento?
Come esempio, si supponga la seguente query, eseguita da un utente:
select * from SOME_TABLE where THE_ID = 1000 for update;
Con un altro utente voglio verificare se la riga con THE_ID = 1000
è bloccato. Se provo un aggiornamento o qualcosa del genere, il secondo utente viene bloccato e rimane in attesa (non lo voglio).
Ho anche provato eseguendo la seguente query con il secondo utente:
select * from SOME_TABLE where THE_ID = 1000 for update NOWAIT;
Poiché non posso collocare due fermi sulla stessa riga fallirà. E lo fa. Ottengo un "ORA-00054: risorsa occupata e acquisita con l'errore specificato NOWAIT". Posso sempre contare su questo errore per verificare la presenza del blocco, oppure esiste un modo più semplice e pulito per determinare se una riga è bloccata?
Grazie!
si dovrebbe ottieni questo errore "ORA-00054: risorsa occupata e acquisita con NOWAIT specificato" - sei sicuro che il tuo utente possa vedere la tabella? – SeriousCallersOnly
@ SeriousCallersOnly: Grazie, in effetti sto avendo "ORA-00054: risorsa occupata e acquisita con l'errore specificato NOWAIT". L'ORA-00942 è stato lanciato da un altro strato della mia app. Mi dispiace per quello Modificherò la domanda. –