SQL : SELECT verrouillant enreg puis UPDATE

RPG (3 et 4, free), CL, SQL, etc...
Répondre
ybosse
Messages : 5
Enregistré le : mar. 03 nov. 2020, 17:34:12

SQL : SELECT verrouillant enreg puis UPDATE

Message 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

nbonnet
Messages : 61
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: SQL : SELECT verrouillant enreg puis UPDATE

Message 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
Nathanaël

Répondre