ROLLBACK TO SAVEPOINT
ROLLBACK TO SAVEPOINT — annule les instructions jusqu'au
point de sauvegarde
Synopsis
ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] nom_pointsauvegarde
Description
Annule toutes les commandes qui ont été exécutées après
l'établissement du point de sauvegarde. Le point de sauvegarde
reste valide. Il est possible d'y d'y revenir encore si cela
s'avérait nécessaire.
ROLLBACK TO SAVEPOINT
détruit implicitement tous les points de sauvegarde établis après
le point de sauvegarde indiqué.
Paramètres
-
nom_pointsauvegarde
-
Le point de sauvegarde où retourner.
Notes
RELEASE SAVEPOINT est utilisé pour détruire
un point de sauvegarde sans annuler les effets de commandes
exécutées après son établissement.
Spécifier un nom de point de sauvegarde inexistant est une erreur.
Les curseurs ont un comportement quelque peu non transactionnel en
ce qui concerne les points de sauvegarde. Tout curseur ouvert à
l'intérieur d'un point de sauvegarde est fermé lorsque le point de
sauvegarde est rejoint. Si un curseur précédemment ouvert est
affecté par une commande
FETCH
à l'intérieur d'un point de
sauvegarde rejoint par la suite, la position du curseur reste celle
obtenue par
FETCH
(c'est-à-dire que
FETCH
n'est pas annulé). La
fermeture d'un curseur n'est pas non plus remise en cause par une
annulation. Un curseur dont l'exécution provoque l'annulation d'une
transaction est placé dans un état non exécutable. De ce fait,
alors même que la transaction peut être restaurée par
ROLLBACK TO SAVEPOINT
, le curseur
ne peut plus être utilisé.
Exemples
Pour annuler les effets des commandes exécutées après
l'établissement de mon_pointsauvegarde :
ROLLBACK TO SAVEPOINT mon_pointsauvegarde;
La position d'un curseur n'est pas affectée par l'annulation des
points de sauvegarde :
BEGIN;
DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2;
SAVEPOINT foo;
FETCH 1 FROM foo;
?column?
----------
1
ROLLBACK TO SAVEPOINT foo;
FETCH 1 FROM foo;
?column?
----------
2
COMMIT;
Compatibilité
Le standard SQL spécifie que le
mot clé SAVEPOINT est obligatoire mais
PostgreSQL™ et Oracle™ autorisent son omission. SQL
n'autorise que WORK, pas TRANSACTION, après ROLLBACK. De plus, SQL dispose d'une clause
optionnelle AND [ NO ] CHAIN qui n'est
actuellement pas supportée par PostgreSQL™. Pour le reste, cette
commande est conforme au standard SQL.