Control de concurrencia

Josaka
12 de Julio del 2009
Hola a todos,

Tengo la siguiente duda sobre el control de concurrencia que permite o realiza Oracle.

Necesito realizar un control en una transacción de un procedimente almacenado.

De tal forma, cuando se ejecuta el procedimento, ha de "bloquear" la transacción para que si otro usuario llama al mismo procedimiento la transacción se espere a que acabe la primera (commit o rollback)

Sería así???


Procedimiento X{

--Inicio transacción
set transaction isolation level serializable;
--Realizo los selects, update, inserts, necesarios
--Si no error:
Commit;
--Else
Rollback;
--Se acaba la transacción, vuelvo a dejar el estado que tenía anteriormente.
set transaction isolation level read commited;
}

Es esto correcto? Hay alguna otra forma de hacerlo que sea más óptima?

Gracias a todos!!!

DJLopezV
12 de Julio del 2009
Saludos: Segun comprendo, lo que realmente necesitas es utilizar una directiva en PL/SQL que se llama PRAGMA AUTONOMOUS_TRANSACTION que permite crear un procedimiento de base de datos o un paquete de base de datos con un comportamiento independiente de control de transaccion (commit o Rollback) del programa donde es llamado.

Busca ejemplos de esta dorectiva.

Espero te sea de utilidad la respuesta.

Exitos.