Sunday, January 15, 2012

Savepoint (parte 5) (in Spanish / en español)


Ir a la parte 4b 


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>

0 comments: