PDA

Ver la Versión Completa : crear procedure recursivo


Angel
06-06-2003, 16:33:33
Hola a todos.....

Menuda semana que llevo que no me sale nada. :mad:

Estoy intentando hacer un procedure recursivo que me indique dentro de una tabla de usuarios quien será el usuario final que aprobará una petición. es decir, imaginaros la siguiente tabla:

usuario aprueba
u1 u2
u2 u3
u3 NULL

el caso es que si yo pregunto por el usuario final al que le aprueba una petición, en el caso del U1 me debería devolver el U3; el procedure que tengo creado es este, sin embargo, no sé si un procedure recursivo tiene "algun truco", o es que estoy haciendo algo mal

CREATE PROCEDURE "usuarioFinalAprobacion" (
USUARIO VARCHAR (7))
RETURNS (
USUARIOFINAL VARCHAR (80),
IDUSUARIO VARCHAR (7))
AS
declare variable nombreQuienAprueba varchar(80);
declare variable usuario1 varchar(7);
BEGIN
for select quienaprueba, nombreusr from
usuarios
where codusuario=:usuario
into :usuario1,:nombreQuienAprueba do
begin
if (:usuario1 is null) then
begin
usuarioFinal=:nombreQuienAprueba;
idUsuario=:usuario;
end
else
usuario=null;
execute procedure "usuarioFinalAprobacion"(:usuario1)
returning_values :nombreQuienAprueba, :usuario1;
end

END

¿alguna idea?

raul_sal
10-06-2003, 10:58:57
Que tal, talvez deberias de ser mas puntual respecto a cual es el error que te da, ademas debes de considerar que te falta el suspend; luego de que es encontrado el null en el usuario.

Si no es eso avisame y veremos en que te podemos ayudar, pero tienes que ser un poco mas especifico

Angel
10-06-2003, 13:25:33
gracias por responder, de todas formas dejé esa función por imposible y la transcribí a su versión iterativa, quedando algo así:

CREATE PROCEDURE USUARIOFINALAPROBACION (
USUARIO VARCHAR (7))
RETURNS (
USUARIOFINAL VARCHAR (80),
IDUSUARIO VARCHAR (7))
AS
declare variable nombreQuienAprueba varchar(80);
declare variable usuario1 varchar(7);
declare variable usuario2 varchar(7);
BEGIN

while (usuario is not null) do
begin
select quienaprueba, nombreusr from
usuarios
where codusuario=:usuario
into usuario1,nombreQuienAprueba;

usuarioFinal=nombreQuienAprueba;
idUsuario=usuario;
usuario=usuario1;
end

suspend;
END

De todas formas, gracias a todos por vuestras ideas y ayudas