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.