Se puede hacer un rollback o un roll en una transacción. Se puede hacer un rollback hasta un savepoint, pero no es posible hacer un roll hasta un savepoint:
SQL> alter session set nls_language = 'SPANISH';
Sesion modificada.
SQL>
Sesion modificada.
SQL>
Creamos una tabla y ponemos datos dentro:
SQL> create table names
2 (first_name varchar2(10));
Tabla creada.
SQL> insert into names values ('Andrew');
1 fila creada.
SQL>
Luego hacemos un roll y los datos desaparecen:
SQL> roll;
Rollback terminado.
SQL> select * from names;
ninguna fila seleccionada
SQL>
SQL> insert into names values ('Brian');
1 fila creada.
SQL> roll blah;
Rollback terminado.
SQL> select * from names;
ninguna fila seleccionada
SQL>
Ponemos el nombre Colin en la tabla y creamos un savepoint:
SQL> insert into names values ('Colin');
1 fila creada.
SQL> savepoint colin;
Punto de grabacion creado.
SQL>
Y lo hacemos otra vez con David:
SQL> update names set first_name = 'David';
1 fila actualizada.
SQL> savepoint david;
Punto de grabacion creado.
SQL> update names set first_name = 'Edward';
1 fila actualizada.
SQL>
Ahora hacemos un rollback hasta el savepoint david. Éste funciona, el nombre Edward desaparece y el nombre David reaparece:
SQL> rollback to savepoint david;
Rollback terminado.
SQL> select first_name from names;
FIRST_NAME
----------
David
SQL>
2 (first_name varchar2(10));
Tabla creada.
SQL> insert into names values ('Andrew');
1 fila creada.
SQL>
Luego hacemos un roll y los datos desaparecen:
SQL> roll;
Rollback terminado.
SQL> select * from names;
ninguna fila seleccionada
SQL>
Ahora hacemos la misma cosa pero esta vez el roll es seguido por la palabra blah que es una etiqueta:
SQL> insert into names values ('Brian');
1 fila creada.
SQL> roll blah;
Rollback terminado.
SQL> select * from names;
ninguna fila seleccionada
SQL>
Ponemos el nombre Colin en la tabla y creamos un savepoint:
SQL> insert into names values ('Colin');
1 fila creada.
SQL> savepoint colin;
Punto de grabacion creado.
SQL>
Y lo hacemos otra vez con David:
SQL> update names set first_name = 'David';
1 fila actualizada.
SQL> savepoint david;
Punto de grabacion creado.
SQL> update names set first_name = 'Edward';
1 fila actualizada.
SQL>
Ahora hacemos un rollback hasta el savepoint david. Éste funciona, el nombre Edward desaparece y el nombre David reaparece:
SQL> rollback to savepoint david;
Rollback terminado.
SQL> select first_name from names;
FIRST_NAME
----------
David
SQL>
Por fin, intentamos hacer un roll hasta el savepoint colin. Éste no funciona. Oracle piensa que to savepoint colin sea una etiqueta y hace un roll de la transacción entera:
SQL> roll to savepoint colin;
Rollback terminado.
SQL> select first_name from names;
ninguna fila seleccionada
SQL>
Rollback terminado.
SQL> select first_name from names;
ninguna fila seleccionada
SQL>
No hay comentarios:
Publicar un comentario