Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   crear procedure recursivo (https://www.clubdelphi.com/foros/showthread.php?t=1194)

Angel 06-06-2003 15:33:33

crear procedure recursivo
 
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 09: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 12: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


La franja horaria es GMT +2. Ahora son las 23:52:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi