2 CURSORES EN UN PROCEDURE
Publicado por Elpidio MOrales (6 intervenciones) el 01/02/2007 17:50:33
Amigos, que tl, tal vez a algunos de ustedes les vaya a causar gracia lo que pregunte, pero la verdad no e podido resolver este Problema, Ojala alguno de ustedes pueda auxiliarme a resolver este problema.
Estoy usando 2 cursores en un Mismo Procedure,
en el Primero no tengo problema:
.- Lo declaro
.- paso los valores del cursor a mi Tabla Temporal.
.- Elimino el Cursor y listo
En el 2do.
.- Lo declaro
.- cuado quiero pasar los datos a la tabla temporal es donde me marca error en el Fetch_Status, a lo cual no se si esta variable se quede con el valor del 1er Cursor. tal vez necesite reinicarlo ó algo asi.., aDJUNTO EL CODIGO PARA VER SI ALGUIEN PUEDE AYUDARME...
Muchisimas gracias..
EXEC xpConfigSQL
GO
if exists (select * from sysobjects where id = object_id('dbo.spIdelecFlujo') and type = 'P') drop procedure dbo.spIdelecFlujo
GO
Create Procedure spIdelecFlujo
--Estos parametros los deve de mandar el Reporte
--@Mov char(20),
--@MovID varchar(20)
AS
BEGIN
DECLARE
--Estas son las variables que utilzare dentro del Reporte
@CantidadTemp Float,
@CtaDinero char(10),
@CtaDescripcion varchar(100),
@CtaDineroTipo char(10),
@CtaMoneda Char(10),
@CtaSaldo Decimal,
@CtaTipoCambio Float,
@CxcMovId varChar (20),
@CxCFechaEmision Datetime,
@CxcVencimiento DateTime,
@CxCMoneda Char(10),
@CxCTipoCambio Float,
@CxCCliente Char(100),
@CxCImporte Money,
@CxCAgente Char(10),
@CxCSaldo Money,
@CxCNombre VarChar (100)
CREATE TABLE #FlujoTemp(
CtaDinero char (10),
CtaDescripcion VarChar(100) Null,
CtaDineroTipo Char (10),
CtaMoneda Char(10) Null,
CtaSaldo decimal,
CtaTipoCambio Float,
CxcMovId varChar (20),
CxCFechaEmision Datetime,
CxcVencimiento DateTime,
CxCMoneda Char(10),
CxCTipoCambio Float,
CxCCliente Char(100),
CxCImporte Money,
CxCAgente Char(10),
CxCSaldo Money,
CxCNombre VarChar (100)
)
DECLARE cur_GenerarFlujo CURSOR FOR
Select
CtaDinero.CtaDinero,CtaDinero.Descripcion,CtaDinero.Tipo,
CtaDinero.Moneda,CtaDineroConSaldo.Saldo,Mon.TipoCambio
from
CtaDinero,CtaDineroConSaldo,Mon
Where
Left(CtaDinero.CtaDinero,5)<>'Comis'
And CtaDinero.moneda=Mon.Moneda
And CtaDinero.CtaDinero=CtaDineroConSaldo.CtaDinero
OPEN cur_GenerarFlujo
FETCH NEXT FROM cur_GenerarFlujo INTO @CtaDinero,@CtaDescripcion,@CtaDineroTipo,@CtaMoneda,
@CtaSaldo,@CtaTipoCambio
Set @CantidadTemp=0
While @@Fetch_Status<>-1
Begin
INSERT INTO #FlujoTemp VALUES(@CtaDinero,@CtaDescripcion,@CtaDineroTipo,@CtaMoneda,@CtaSaldo,@CtaTipoCambio)
FETCH NEXT FROM cur_GenerarFlujo INTO @CtaDinero,@CtaDescripcion,@CtaDineroTipo,@CtaMoneda,
@CtaSaldo,@CtaTipoCambio
Set @CantidadTemp=@CantidadTemp+1
End
CLOSE cur_GenerarFlujo
DEALLOCATE cur_GenerarFlujo
-- Aqui Comienzo los datos de CxC
-- y vulvo a abrir el mismo Cursor
--SE PODRA HACER ESTOOOOOO
DECLARE cur_GenerarFlujoA CURSOR FOR
Select
CxC.MovId,CxC.FechaEmision,CxC.Vencimiento,CxC.Moneda,CxC.TipoCambio,CxC.Cliente,
CxC.Importe,CxC.Agente,CxC.Saldo,Cte.Nombre
From CxC,Cte
Where CxC.Mov='Factura' And. CxC.Estatus='Pendiente' And Cte.Cte=Cxc.Cliente
OPEN cur_GenerarFlujoA
FETCH NEXT FROM cur_GenerarFlujoA INTO @CxCMovId,@CxCFechaEmision,@CxCVencimiento,@CxCMoneda,@CxCTipoCambio,
@CxCCliente,@CxCImporte,@CxCAgente,@cxCSaldo,@CxCNombre
Set @CantidadTemp=0
While @@Fetch_Status<>-1 --AQUI ES DONDE ME MARCA EL ERRO---
Begin
INSERT INTO #FlujoTemp VALUES(@CxCMovId,@CxCFechaEmision,@CxCVencimiento,@CxCMoneda,@CxCTipoCambio,
@CxCCliente,@CxCImporte,@CxCAgente,@cxCSaldo,@CxCNombre
FETCH NEXT FROM cur_GenerarFlujoA INTO @CxCMovId,@CxCFechaEmision,@CxCVencimiento,@CxCMoneda,@CxCTipoCambio,
@CxCCliente,@CxCImporte,@CxCAgente,@cxCSaldo,@CxCNombre
Set @CantidadTemp=@CantidadTemp+1
End
CLOSE cur_GenerarFlujoA
DEALLOCATE cur_GenerarFlujoA
SELECT * FROM #FlujoTemp
End
Estoy usando 2 cursores en un Mismo Procedure,
en el Primero no tengo problema:
.- Lo declaro
.- paso los valores del cursor a mi Tabla Temporal.
.- Elimino el Cursor y listo
En el 2do.
.- Lo declaro
.- cuado quiero pasar los datos a la tabla temporal es donde me marca error en el Fetch_Status, a lo cual no se si esta variable se quede con el valor del 1er Cursor. tal vez necesite reinicarlo ó algo asi.., aDJUNTO EL CODIGO PARA VER SI ALGUIEN PUEDE AYUDARME...
Muchisimas gracias..
EXEC xpConfigSQL
GO
if exists (select * from sysobjects where id = object_id('dbo.spIdelecFlujo') and type = 'P') drop procedure dbo.spIdelecFlujo
GO
Create Procedure spIdelecFlujo
--Estos parametros los deve de mandar el Reporte
--@Mov char(20),
--@MovID varchar(20)
AS
BEGIN
DECLARE
--Estas son las variables que utilzare dentro del Reporte
@CantidadTemp Float,
@CtaDinero char(10),
@CtaDescripcion varchar(100),
@CtaDineroTipo char(10),
@CtaMoneda Char(10),
@CtaSaldo Decimal,
@CtaTipoCambio Float,
@CxcMovId varChar (20),
@CxCFechaEmision Datetime,
@CxcVencimiento DateTime,
@CxCMoneda Char(10),
@CxCTipoCambio Float,
@CxCCliente Char(100),
@CxCImporte Money,
@CxCAgente Char(10),
@CxCSaldo Money,
@CxCNombre VarChar (100)
CREATE TABLE #FlujoTemp(
CtaDinero char (10),
CtaDescripcion VarChar(100) Null,
CtaDineroTipo Char (10),
CtaMoneda Char(10) Null,
CtaSaldo decimal,
CtaTipoCambio Float,
CxcMovId varChar (20),
CxCFechaEmision Datetime,
CxcVencimiento DateTime,
CxCMoneda Char(10),
CxCTipoCambio Float,
CxCCliente Char(100),
CxCImporte Money,
CxCAgente Char(10),
CxCSaldo Money,
CxCNombre VarChar (100)
)
DECLARE cur_GenerarFlujo CURSOR FOR
Select
CtaDinero.CtaDinero,CtaDinero.Descripcion,CtaDinero.Tipo,
CtaDinero.Moneda,CtaDineroConSaldo.Saldo,Mon.TipoCambio
from
CtaDinero,CtaDineroConSaldo,Mon
Where
Left(CtaDinero.CtaDinero,5)<>'Comis'
And CtaDinero.moneda=Mon.Moneda
And CtaDinero.CtaDinero=CtaDineroConSaldo.CtaDinero
OPEN cur_GenerarFlujo
FETCH NEXT FROM cur_GenerarFlujo INTO @CtaDinero,@CtaDescripcion,@CtaDineroTipo,@CtaMoneda,
@CtaSaldo,@CtaTipoCambio
Set @CantidadTemp=0
While @@Fetch_Status<>-1
Begin
INSERT INTO #FlujoTemp VALUES(@CtaDinero,@CtaDescripcion,@CtaDineroTipo,@CtaMoneda,@CtaSaldo,@CtaTipoCambio)
FETCH NEXT FROM cur_GenerarFlujo INTO @CtaDinero,@CtaDescripcion,@CtaDineroTipo,@CtaMoneda,
@CtaSaldo,@CtaTipoCambio
Set @CantidadTemp=@CantidadTemp+1
End
CLOSE cur_GenerarFlujo
DEALLOCATE cur_GenerarFlujo
-- Aqui Comienzo los datos de CxC
-- y vulvo a abrir el mismo Cursor
--SE PODRA HACER ESTOOOOOO
DECLARE cur_GenerarFlujoA CURSOR FOR
Select
CxC.MovId,CxC.FechaEmision,CxC.Vencimiento,CxC.Moneda,CxC.TipoCambio,CxC.Cliente,
CxC.Importe,CxC.Agente,CxC.Saldo,Cte.Nombre
From CxC,Cte
Where CxC.Mov='Factura' And. CxC.Estatus='Pendiente' And Cte.Cte=Cxc.Cliente
OPEN cur_GenerarFlujoA
FETCH NEXT FROM cur_GenerarFlujoA INTO @CxCMovId,@CxCFechaEmision,@CxCVencimiento,@CxCMoneda,@CxCTipoCambio,
@CxCCliente,@CxCImporte,@CxCAgente,@cxCSaldo,@CxCNombre
Set @CantidadTemp=0
While @@Fetch_Status<>-1 --AQUI ES DONDE ME MARCA EL ERRO---
Begin
INSERT INTO #FlujoTemp VALUES(@CxCMovId,@CxCFechaEmision,@CxCVencimiento,@CxCMoneda,@CxCTipoCambio,
@CxCCliente,@CxCImporte,@CxCAgente,@cxCSaldo,@CxCNombre
FETCH NEXT FROM cur_GenerarFlujoA INTO @CxCMovId,@CxCFechaEmision,@CxCVencimiento,@CxCMoneda,@CxCTipoCambio,
@CxCCliente,@CxCImporte,@CxCAgente,@cxCSaldo,@CxCNombre
Set @CantidadTemp=@CantidadTemp+1
End
CLOSE cur_GenerarFlujoA
DEALLOCATE cur_GenerarFlujoA
SELECT * FROM #FlujoTemp
End
Valora esta pregunta


0