FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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? |
#2
|
|||
|
|||
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 |
#3
|
|||
|
|||
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 |
|
|
|