Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-06-2003
Angel Angel is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante, España
Posts: 58
Poder: 21
Angel Va por buen camino
crear procedure recursivo

Hola a todos.....

Menuda semana que llevo que no me sale nada.

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?
Responder Con Cita
  #2  
Antiguo 10-06-2003
raul_sal raul_sal is offline
No confirmado
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 45
Poder: 0
raul_sal Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 10-06-2003
Angel Angel is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante, España
Posts: 58
Poder: 21
Angel Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:52:18.


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