Ver Mensaje Individual
  #1  
Antiguo 01-07-2008
Addicto Addicto is offline
Registrado
 
Registrado: oct 2007
Posts: 2
Reputación: 0
Addicto Va por buen camino
Unhappy Error Lock conflict al momento de Delete

Holas, bueno primero que nada saludos a todos, espero que puedan ayudarme en mi consulta pues e visto sus post y sen expertos en la materia.

bueno mi problema es el siguiente, estoy realizando un procedimiento almacenado (en firebird 1.5) el cual envia parametros a un segundo procedimiento mediante el comando EXECUTE PROCEDURE, el problema que tengo es cuando se ejecuta el procedimiento este no ejecuta el delete que lo forma y me muestra el siguiente error

Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
Lock conflict on no wait transaction.
Deadlock.
Update conflicts with concurrent update.
SQL Code: -901
IB Error Number: 335544345

bueno este es mi script principal:
Código SQL [-]
CREATE PROCEDURE ACTUALIZA_HAPS(
  NUEVO INTEGER,
  VIEJO INTEGER)
AS
DECLARE VARIABLE CONT INTEGER;
DECLARE VARIABLE ULTIMO INTEGER;
DECLARE VARIABLE ID INTEGER;
DECLARE VARIABLE PROG_ID INTEGER;
DECLARE VARIABLE ESTADO INTEGER;
BEGIN
CONT=0;
nuevo=1844855;
viejo=1847710;
EXECUTE PROCEDURE elimina_uspc(:nuevo); 
EXECUTE PROCEDURE elimina_uspc(:viejo);
for
   select PROG_ID
   from HAPS_HISTORIAL_USUARIO
   where usp_id in (:NUEVO,:VIEJO)
   group by prog_id
  into rog_id
do
begin
     FOR
        SELECT ID,ESTADO
        FROM HAPS_HISTORIAL_USUARIO
        WHERE PROG_ID = :PROG_ID AND USP_ID IN (:NUEVO,:VIEJO)
     INTO :ID,:ESTADO
     DO
     BEGIN
        if (ESTADO IN (1,2,8) AND :cont = 0) THEN
        BEGIN
             cont = 1;
             ultimo = :id;
        END
        ELSE IF (ESTADO IN (1,2,8) AND :cont = 1) THEN
        BEGIN
            delete from HAPS_HISTORIAL_USUARIO where id = :id;
        END
        ELSE IF (ESTADO IN (4,3,5,6,7,9,10)  AND :cont = 1) THEN
        BEGIN
             cont = 0;
             ultimo = :id;
        END
        ELSE IF (ESTADO IN (4,3,5,6,7,9,10)  AND :cont = 0) THEN
        BEGIN
             delete from HAPS_HISTORIAL_USUARIO  where id = :id;
        END
    end
     
        EXECUTE PROCEDURE INSERT_USPC(:ultimo);
suspend;
END
end
;





y este es el procedimiento el cual me muestra error:
Código SQL [-]
CREATE PROCEDURE ELIMINA_USPC(
  VAR INTEGER)
AS
BEGIN
  delete from USPC_USUARIO_APS_BAJO_CONTROL where usp_id = :var; 
end;


yo creo que el procedimiento principal me debe dejar la base de datos tomada con alguna transaction, pero no encuentro la forma de hacer un commit cuando se ejecuta el delete.

bueno eso, espero puedan ayudarme. Gracias.

Última edición por Addicto fecha: 01-07-2008 a las 16:13:26.
Responder Con Cita