Bonjour,
dans la boite ou je suis, pour empecher que les utilisateurs modifient la même ligne en même temps, nous faisant un
Dans notre application nous avons un bouton modifier que met l'application en mode modification et donc sur ce bouton on fait le "SELECT FOR UPDATE NOWAIT" -> si on recoit un exception c'est que c locker sinon on passe en mode modification.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM TABLE1 WHERE TBL_ID = 12345 FOR UPDATE NOWAIT
Quand l'utilisateur reçoit l'exception, j'aimerai bien afficher un message d'erreur lui disant que tel ou tel autre personne est entrain de modifier pour cela j'ai fait
et j'ai remarqué que A.OBJECT_ID est different de ROW_WAIT_OBJ#, ce qui à mon sens est normal vu que personne n'est bloqué et en attente.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 select substr(object_name,1,20) "Object", substr(os_user_name,1,10) "Terminal", substr(oracle_username,1,10) "User", OBJECT_TYPE "Type", A.OBJECT_ID, ROW_WAIT_OBJ#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW#, dbms_rowid.rowid_create ( 1, ROW_WAIT_OBJ#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW#) FROM SYS.V_$LOCKED_OBJECT A, SYS.ALL_OBJECTS B, SYS.V_$SESSION c WHERE A.OBJECT_ID = B.OBJECT_ID AND C.SID = A.SESSION_ID
A.OBJECT_ID represente TABLE1 tandis que ROW_WAIT_OBJ# une autre TABLE X
Ceci reprensente un probleme car je ne peux pas recupere le rowid de la ligne lockée dans TABLE1 car dbms_rowid.rowid_create ( 1, ROW_WAIT_OBJ#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW#) me donne le ROWID dans TABLE X.
Est-ce que vous avez une autre solution à me proposer ??
Merci beaucoup
Partager