> Manuales > Tutorial de Oracle

Control de transacciones en Oracle. Una transacción se define como un conjunto de operaciones sobre la base de datos.

En Oracle si se ejecuta un conjunto de operaciones y una de ellas falla se aborta la transacción entera. En este artículo veremos todo lo que debemos saber sobre transacciones y algunos ejemplos interesantes. Está englogado dentro del Manual de Oracle que venimos publicando en DesarrolloWeb.com.

La transacción finaliza cuando se ejecuta un comando de control de transacciones como rollback o commit work (se puede abreviar poniendo simplemente commit).

Un ejemplo:

BEGIN
....

update alumnos set edad=20 where n_alumno=109;
update nuevos set apellido='perez' where n_alumno=200;
commit work;

...

EXCEPTION
   WHEN OTHERS THEN
      rollback work;
END;

Comandos utilizados para el control de transacciones

Commit
Este comando da por concluida la transacción actual y hace definitivos los cambios realizados liberando las filas bloqueadas. Sólo después de que se ejecute commit tendremos acceso a los datos modificados.

Rollback
Este comando da por concluida la transacción actual y deshace los cambios que se pudiesen haber producido en la misma, liberando las filas bloqueadas. Se utiliza especialmente cuando no se puede concluir una transacción porque se han levantado excepciones.

Savepoint
Se utiliza para poner marcas o puntos de salvaguarda al procesar transacciones. Se utiliza junto con rollback permitiendo deshacer cambios hasta los savepoint.
El número de savepoint esta limitado a 5 por sesión pero lo podemos modificar con la siguiente sentencia:

savepoint numero;

Rollback implicito
Este comando se ejecuta cuando un programa almacenado (procedimiento o función) falla y no se controla la excepción que produjo el fallo. Pero si en el programa tenemos un commit estos cambios no serán deshechos.

Rollback to
Deshace el trabajo realizado después del punto indicado. Pero no se confirma el trabajo hecho hasta el savepoint. La transacción no finaliza hasta que se ejecuta un comando de control de transacciones o hasta que finaliza la sesión.

Os dejo a continuación un ejemplo bastante completo de lo que seria el control de transacciones:

create or replace procedure prueba (nfilas number)
as
   begin
      savepoint ninguna;
      insert into tmp values ('primera fila');
      savepoint una;
      insert into tmp values ('segunda fila');
      savepoint dos;
      if nfilas=1 then
         rollback to una;
      else if nfilas=2 then
         rollback to dos;
      else
         rollback to ninguna;
      end if;
      commit;
      exception
         when other then
            rollback
end prueba;

Con este artículo terminamos la parte básica sobre oracle, PL/SQL y pasamos a lo que podemos denominar programación avanzada de sql. Empezaremos con triggers en el siguiente artículo.

Sara Alvarez

Equipo DesarrolloWeb.com

Manual