Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-09-2004
williammoreno williammoreno is offline
Miembro
 
Registrado: dic 2004
Posts: 11
Poder: 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
 



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 22:28:58.


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