Oracle - Concurrencias y bloqueos

   
Vista:

Concurrencias y bloqueos

Publicado por Carmita (5 intervenciones) el 21/11/2007 15:52:18
Hola puede alguien ayudarme a realizar un bloqueo para evitar incoherencias el momento de grabar la información?

Mi aplicación se trata de un sistema de matriculas, pero puede haber mas de un usuario realizando una matrícula, el momento que se guarda la matricula se guarda con un numero que se genera al presionar un botón, como puedo hacer para que ese numero no se repita el momento de guardar, es decir si hay concurrencia de los usuarios como evito que se genere el mismo numero?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Concurrencias y bloqueos

Publicado por Jorge Elias (13 intervenciones) el 22/11/2007 15:57:19
Por que no usas Secuencias:

CREATE SEQUENCE SQ_ID_MATRICULA
INCREMENT BY 1
START WITH 1
MINVALUE 1
MAXVALUE 999999999999999999999999999
NOCYCLE
NOORDER
NOCACHE

para obtener el siguiente valor solo haces un

SELECT SQ_ID_MATRICULA.NEXTVAL
INTO ID_MATRICULA
FROM DUAL;

Con esto evitas que se dupliquen.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Concurrencias y bloqueos

Publicado por Pedro (24 intervenciones) el 22/11/2007 16:12:09
La Respuesta del Compañero anterio es Correcta, pero tambien si no quieres crear secuencia puede hacer este Procedimiento a nivel de Forma que se Grabe la secuencia cuando Pulse el Boton de Grabar o cuando Pulse F10
Ejemplo:

PROCEDURE grabar IS
msg VARCHAR2(50);
cks_boton NUMBER;
BEGIN
lock table soportes in row exclusive mode;
SELECT nvl(max(id_Matricula),0) +1
INTO :id_Matricula
FROM EJEMPLO ;

msg := 'EL No. de su Matricula es: '|| to_char(:id_Matricula);

CHANGE_ALERT_MESSAGE('alert_Matricula', msg);
cks_boton := SHOW_ALERT('alert_Matricula');
commit_form;
clear_form;
END;

Este Procedumiento te ayudara por solo graba el ID al momento de hacer el commit;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar