La sentencia ROLLBACK se utiliza para retrotraer los
cambios de base de datos hechos dentro de una unidad de trabajo
o punto de rescate.
Invocación
Esta sentencia se puede
integrar en un programa de aplicación o ser emitida
interactivamente. Es una sentencia ejecutable que se puede preparar dinámicamente.
Sintaxis
.-WORK-.
>>-ROLLBACK--+------+--+----------------------------------------+-><
'-TO SAVEPOINT--+----------------------+-'
'-nombre-punto-rescate-'
Descripción
Concluye la unidad de trabajo
en la que se ejecuta la sentencia ROLLBACK y se inicia una nueva
unidad de trabajo. Se retrotraen todos los cambios hechos en la base de datos
durante la unidad de trabajo.
La creación de valores de secuencia e identidad no está
bajo el control de la transacción.
Los valores creados por la inserción de filas en una tabla que
tiene una columna de identidad son independientes de la emisión
de la sentencia ROLLBACK.
- TO SAVEPOINT
- Especifica que se debe realizar una retrotracción
parcial (ROLLBACK TO SAVEPOINT).
Si no existe ningún punto de rescate activo en el nivel de punto
de rescate actual (vea la sección "Reglas" en la descripción de
la sentencia SAVEPOINT), DB2 Everyplace devuelve un error y el
código SQLSTATE 3B502. Después de una retrotracción
satisfactoria, el punto de rescate sigue existiendo, pero los
puntos de rescate anidados se liberan y dejan de existir. Se considera que los puntos de rescate anidados, si los hay, se
han retrotraído y luego liberado como parte de la retrotracción
hasta el punto de rescate actual. Si no se proporciona ningún nombre de punto de rescate, la
retrotracción se realiza hasta el punto de rescate definido más
recientemente dentro del nivel de punto de rescate actual.
- Si se omite esta cláusula, la sentencia ROLLBACK retrotrae
la transacción completa. Además, se liberan los puntos de rescate existentes en la
transacción.
- nombre-punto-rescate
- Especifica el punto de rescate hacia el que revierte DB2
Everyplace durante la operación de retrotracción. DB2 Everyplace invierte todos los cambios que se realizaron en
datos y esquemas desde que se estableció el punto de rescate. Después de una operación satisfactoria de retrotracción, el
punto de rescate sigue existiendo.
- Cuando utiliza el argumento
nombre-punto-rescate, debe seguir las
restricciones siguientes:
- El nombre especificado en
nombre-punto-rescate no puede comenzar con
'SYS'.
Si especifica un nombre de punto de rescate que comienza con
'SYS', DB2 Everyplace devuelve el SQLSTATE 42939.
- Si el nombre especificado en
nombre-punto-rescate no existe, DB2
Everyplace devuelve un error y el SQLSTATE 3B001.
Notas
- La retrotracción de una unidad de trabajo hace que se
liberen todos los bloqueos establecidos. Se cierran todos los cursores abiertos. Se liberan todos los localizadores de LOB.
- Si el programa termina de forma anómala, se realiza una
retrotracción implícita de la unidad de trabajo.
- El efecto de una sentencia ROLLBACK TO SAVEPOINT en los
cursores depende de las sentencias existentes dentro del punto
de rescate:
- Si el punto de rescate contiene DDL o DML del cual depende
un cursor, el cursor se marca como no válido. Si el usuario intenta utilizar este cursor, DB2 Everyplace
devuelve un error y el código SQLSTATE 57007.
- Si el cursor se especifica en el punto de rescate, el
cursor permanece abierto y se coloca delante de la siguiente
fila lógica del conjunto de resultados.
- En otro caso, el cursor permanece abierto y posicionado, y
no es afectado por la sentencia ROLLBACK TO SAVEPOINT.
- Los nombres de sentencias preparadas dinámicamente siguen
siendo válidos, aunque la sentencia puede ser preparada de nuevo
implícitamente, como resultado de operaciones de DDL que se
retrotraen dentro del punto de rescate.
- Después de una sentencia ROLLBACK TO SAVEPOINT, todos los
bloqueos se conservan si el punto de rescate especificado en la
sentencia se ha creado con la opción ON ROLLBACK RETAIN LOCKS. En otro caso, todos los bloqueos establecidos con posterioridad
al punto de rescate se liberan.
- Todos los localizadores de LOB se conservan después de una
operación ROLLBACK TO SAVEPOINT.
Ejemplo
Suprimir todas las alteraciones
que se han realizado desde la última operación commit o rollback.
ROLLBACK WORK