Ayuda con cursor PL/SQL

Buenos días,
Te envío este código pues no encuentro porque el
cursor no realiza correctamente la selección. Me explico
si hago la misma selección en el svrmgrl se me devuelve un registro
mientras que en el código pl/sql nunca se me devuelve
nada, por lo que jamas controla nada.
Gracias por todo y saludos,
Juan Sanchez
cursor cLOCK(plILCK baan.ttisfc962998.t$ilck%TYPE, plETID baan.ttisfc962998.t$etid%TYPE) is
select t$item,t$cdad from ttisfc962998 where t$etid<> plETID and t$ilck=plILCK and rownum=1;
sITEM_LOCK baan.ttisfc962998.t$item%TYPE;
lCDAD_LOCK baan.ttisfc962998.t$cdad%TYPE;
sITEM_2_LOCK baan.ttisfc962998.t$item%TYPE;
lCDAD_2_LOCK baan.ttisfc962998.t$cdad%TYPE;
BEGIN
update ttisfc962998 set t$ilck=lILCK where t$etid=lETID and t$ilck=0;
if SQL%FOUND then /* Si se modifica devolver un rdo */
open cLOCK(lILCK,lETID);
if cLOCK%FOUND then
fetch cLOCK into sITEM_LOCK, lCDAD_LOCK;
select t$item, t$cdad into sITEM_2_LOCK,lCDAD_2_LOCK from baan.ttisfc962998 where t$etid=lETID;
if sITEM_2_LOCK <> sITEM_LOCK then /* Como el art es diferente -> rollback */
update baan.ttisfc962998 set t$ilck=0 where t$ilck=lILCK or t$etid=lETID;
return 3; /* Artículo diferente con 1º et.int. De la secuencia */
end if;
if lCDAD_2_LOCK <> lCDAD_LOCK then /* Como la cdad es diferente -> rollback */
update baan.ttisfc962998 set t$ilck=0 where t$ilck=lILCK or t$etid=lETID;
return 2; /* Cdad diferente con 1º et.int. De la secuencia */
end if;
return 0; /* Etiq.int. Bloqueada y comprobada */
else
return 0; /* Al ser la primera etiq.int. Y bloquearse, se devuelve OK */
end if;
else
update ttisfc962998 set t$ilck=0 where abs(t$ilck)=lILCK;
return 1;
end if;
EXCEPTION
WHEN others THEN
return 4;
END;

1 Respuesta

Respuesta
1
Siento no poder ayudarte, pero soy administrador puro y de pl/sql lo justito para hacer algun procedimiento sencillito, poco más.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas