sábado, 8 de junio de 2013

Savepoint (parte 6)

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>

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>


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>

No hay comentarios:

Publicar un comentario