Comment voulez-vous vérifier si une ligne est verrouillé pour la mise à jour?

Est-il un moyen que l'on peut tester si une ligne a été verrouillé pour la mise à jour dans Oracle?

Supposons, par exemple, la requête suivante, effectuée par un utilisateur:

select * from SOME_TABLE where THE_ID = 1000 for update;

Avec un autre utilisateur, je veux vérifier si la ligne avec THE_ID = 1000 est verrouillé. Si je tente une mise à jour ou quelque chose de la deuxième utilisateur sera bloqué et reste en attente (ne souhaitez pas que).

J'ai également essayé de lancer la requête suivante avec le deuxième utilisateur:

select * from SOME_TABLE where THE_ID = 1000 for update NOWAIT;

Puisque je ne peux pas placer deux verrous sur la même ligne ce sera un échec. Et il le fait. Je reçois un "ORA-00054: resource busy et d'acquérir avec NOWAIT spécifié erreur". Je peux toujours compter sur cette erreur de vérifier la présence de la serrure, ou est-il plus simple et plus propre façon de déterminer si une ligne est-il verrouillé?

Merci!

vous devriez obtenir cette erreur "ORA-00054: resource busy et d'acquérir avec NOWAIT spécifié" - êtes-vous sûr que votre utilisateur peut voir la table?
SeriousCallersOnly: Merci, je suis en effet d'avoir la “ORA-00054: resource busy et d'acquérir avec NOWAIT spécifié erreur”. L'ORA-00942 a été jeté par une autre couche de mon application. Désolé à ce sujet. Je vais modifier la question.

OriginalL'auteur | 2009-10-15