Bonjour,
Je partage ici les résultats d'une recherche :
Le contexte :
Je souhaite faire un SELECT qui verrouille le ou les enregistrements en vu de faire un UPDATE par la suite.
NB:Le fichier attaqué est journalisé.
J'ai trouvé ce moyen :
Je me connecte sur une session A (via ACS Script)
SELECT * FROM Fichier WHERE MesCritères FOR UPDATE WITH RS;
Je me connecte sur une session B (sous ACS Script) je refais le même SELECT, et en effet, il attend une libération des enregistrements manifestement bien verrouillés par la session A.
je reviens sur la session A :
UPDATE Fichier SET zones=valeurs WHERE MesCritères WITH RS;
COMMIT;
juste après le commit, la session B affiche les enregistrement juste libérés par session A.
La session B est désormais détenteur du verrouillage.
Espérant que cette méthode soit correcte.
Bonne journée
SQL : SELECT verrouillant enreg puis UPDATE
Re: SQL : SELECT verrouillant enreg puis UPDATE
Bonjour,
cette solution est bonne (en fonction de ce que l'on veut faire).
Un rappel toutefois : les transactions servent à gérer la visibilité des données en concurrence => le niveau de transaction sur la session B est important également !
En fonction, on peut avoir des lectures "sales".
Pour finir, il existe des mots clés additionnels sur SELECT : par exemple SKIP LOCKED DATA qui permet explicitement de ne pas prendre en copte les lignes verrouillées par une transaction
cette solution est bonne (en fonction de ce que l'on veut faire).
Un rappel toutefois : les transactions servent à gérer la visibilité des données en concurrence => le niveau de transaction sur la session B est important également !
En fonction, on peut avoir des lectures "sales".
Pour finir, il existe des mots clés additionnels sur SELECT : par exemple SKIP LOCKED DATA qui permet explicitement de ne pas prendre en copte les lignes verrouillées par une transaction
Nathanaël