Ver Mensaje Individual
  #1  
Antiguo 09-09-2004
williammoreno williammoreno is offline
Miembro
 
Registrado: dic 2004
Posts: 11
Reputación: 0
williammoreno Va por buen camino
Question Procedimiento almacenado recursivo

Hola a todos:

Mi problema es que deseo crear un procedimiento almacenado recursivo. En este procedimiento declaro el cursor cur_ActActividad. Cuando el procedimiento inicia la primera ejecución crea dicho cursor y cuando se llama a sí mismo el procedimiento intenta volver a crear el mismo cursor por lo tanto me marca el error que el cursor ya existe, debido que el cursor es global en la conexión. Abajo les adjunto el código del procediento en mención.

Que estrategia me sugieren uds. para superar este problema?
Código SQL [-]
CREATE PROC sp_VlrActProducto @IdActividad INT, @StrCriterio TEXT,@Año INT, @Mes SMALLINT
AS
DECLARE @actPadre INT DECLARE @VlrActAct FLOAT DECLARE @TotActAct FLOAT DECLARE @Resultado FLOAT DECLARE @Total FLOAT DECLARE cur_ActActividad CURSOR FOR SELECT IdActOrigen, VlrActAct FROM cstActActividad WHERE AñoActAct = @Año AND MesActAct = @Mes AND IdActDestino = @IdActividad AND IndHabilitado = 1 SELECT @Total = 0 OPEN cur_ActActividad FETCH NEXT FROM cur_ActActividad INTO @actPadre, @VlrActAct IF (@@FETCH_STATUS = 0) BEGIN
WHILE (@@FETCH_STATUS = 0) BEGIN
SELECT @TotActAct = SUM(VlrActAct) FROM cstActActividad WHERE AñoActAct = @Año AND MesActAct = @Mes AND IdActOrigen = @actPadre AND IndHabilitado = 1 EXEC @Resultado = sp_VlrActProducto @actPadre, @strCriterio, @Año, @Mes IF PATINDEX ('%;' + CONVERT(VARCHAR,@actPadre) + ';%', @StrCriterio) > 0
SELECT @Total = @Total + ( @VlrActAct + @Resultado) * @VlrActAct / @TotActAct
ELSE
SELECT @Total = @Total + @Resultado * @VlrActAct / @TotActAct
FETCH NEXT FROM cur_ActActividad INTO @actPadre, @VlrActAct
END
END ELSE
SELECT @total = 0
CLOSE cur_ActActividad DEALLOCATE cur_ActActividad RETURN(@Total)
Gracias por su colaboración !!

Última edición por Casimiro Notevi fecha: 03-02-2016 a las 17:22:50.
Responder Con Cita