Petite précision.
Oracle, comme beaucoup de sgbd, support les transactions imbriquées.
Donc en réalité, si, c'est tout à fait possible de faire un rollback après une série de commit.
Par contre, ça ne résoud pas le problème initial, puisque commiter une sous-transaction ne participe pas à réduire la taille du rollback segment.
Code :
- declare verif number;
- declare verif2 number;
- begin transaction permiere;
- update toto set truc = 'machin' where test > 0;
- begin transaction seconde;
- delete toto where truc = 'machin' where test = 1;
- select count(*) into verif where truc = 'machin';
- if verif > 0
- begin
- rollback seconde;
- end
- else
- begin
- commit seconde;
- end;
- select count(*) into verif2 where truc <> 'machin';
- if verif2 > 0
- begin
- commit premiere;
- end
- else
- begin
- rollback premiere; -- Ceci va annuler tout le lot, y compris la transaction "seconde" si elle a été commitée.
- end;
|
Normalement, à quelques problèmes de syntaxe près, ça doit marcher.
Et on vois bien à quoi sert de faire deux transactions imbriquées.
Message édité par Arjuna le 30-10-2005 à 11:08:06