Page 1 sur 1

SQL : SELECT verrouillant enreg puis UPDATE

Posté : mar. 17 nov. 2020, 15:40:04
par ybosse
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

Re: SQL : SELECT verrouillant enreg puis UPDATE

Posté : mar. 17 nov. 2020, 15:46:58
par nbonnet
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