ERROR the number of variables declared in the into
Publicado por Phoebe (2 intervenciones) el 11/06/2009 23:03:24
Hola! tengo el siguiente error con un store procedure:
CursorFetch: the number of variables declared in the into list must match that of selected columns.
Aparentemente el error ocurre cuando el numero de variables en la sentencia INTO del Cursor no coincide con el numero de columnas seleccionadas, pero revise y tengo el mismo numero, tengo 9 variables y 9 columnas, he probado otras cosas pero nada, por favor quien tenga algo que me sirva se lo agadeceria.
El store procedure es el siguiente:
CREATE PROCEDURE sp_GeneraTrayCXP (@pUserID as VARCHAR(20),
@pPharmacyID as VARCHAR(6),
@pRelationDate as VARCHAR(8))
AS
DECLARE
@vRelationDate VARCHAR(8),
@vReceiptDate VARCHAR(8),
@vPharmacyID VARCHAR(6),
@vProv VARCHAR(10),
@vNumero VARCHAR(50),
@vNumeroProv VARCHAR(50),
@vDocumentDate VARCHAR(8),
@vCodSuc VARCHAR(3),
@vCPgCod VARCHAR(2),
@vDescrip VARCHAR(50),
@vMoneda VARCHAR(3),
@vAmount NUMERIC(16,2),
@vCuentaC NUMERIC,
@vLinea NUMERIC(18),
@vVAT NUMERIC(16,2),
@vCodRetI VARCHAR(4),
@vTaxable NUMERIC(16,2),
@vExempt NUMERIC(16,2),
@vRet NUMERIC(16,2),
@vRete NUMERIC(16,2),
@vCRet VARCHAR(4),
@vPRet NUMERIC(6,2),
@vBase NUMERIC(16,2),
@vBRet NUMERIC(16,2),
@vPorc NUMERIC(6,2),
@vMtoImp NUMERIC(16,2),
@vDiasPg VARCHAR(4),
@vFchV VARCHAR(10),
@vFchR VARCHAR(8),
@vSubT NUMERIC(16,2),
@vSubTl NUMERIC(16,2),
@vDif NUMERIC(16,2),
@vCta VARCHAR(8),
@vCodCia VARCHAR(2),
@vCia VARCHAR(2),
@vSuc VARCHAR(2),
@vCiaL VARCHAR(2),
@vSucL VARCHAR(2),
@vRifCia VARCHAR(16),
@vRif VARCHAR(16),
@ins_error int,
@RelationDate VARCHAR(8)
--Lee tabla RelationRevenue
DECLARE C_RelationRevenue CURSOR FOR
SELECT
PharmacyID,
ManufacturerID,
RIGHT(CodeAccountant,8),
DocumentDate,
REPLACE (ISNULL (Description,''),',',''),
Amount,
VAT,
RelationDate,
CodeAccountant
FROM RelationRevenue
WHERE
(PharmacyID = @pPharmacyID) AND
(RelationDate = @pRelationDate) AND
(CodeTrans IN ('112')) AND
Description <> ''
-- Abre cursor
OPEN C_RelationRevenue
FETCH NEXT FROM C_RelationRevenue INTO
@vPharmacyID, @vProv, @vNumero,
@vDocumentDate, @vDescrip, @vAmount,
@vVAT, @RelationDate, @vNumeroProv
SET @vLinea = 0
SET @vExempt = 0
WHILE @@FETCH_STATUS = 0
BEGIN
-- Calcula Tasa
SELECT @vPorc=IVAPercent
FROM dbo.IVAType
WHERE EffectiveDate=(SELECT max(EffectiveDate)
FROM dbo.IVAType
WHERE EffectiveDate<=@vDocumentDate)
-- Calcula Base y Exento
SET @vBase = (100*@vVAT)/@vPorc
SET @vExempt = @vAmount-@vBase-@vVAT
-- Busca RIF de Compañias
BEGIN
SELECT @vRifCia=RifSanfar FROM dbo.GlobalParameters
END
-- Busca datos de la Farmacia
BEGIN
SELECT @vCodSuc=id, @vCodCia=accountablecompany, @vRif=RIF
FROM dbo.Branch
WHERE pharmacyid=@vPharmacyID
END
--
IF @vRif = @vRifCia -- Sucursal
BEGIN
SET @vCia='01'
SET @vSuc='07'
SET @vCiaL='01'
SET @vSucL=@vCodSuc
END
IF @vRif <> @vRifCia -- Afiliada
BEGIN
SET @vCia=@vCodCia
SET @vSuc=@vCodCia
SET @vCiaL=@vCodCia
SET @vSucL=@vCodCia
END
-- Busca en SAFIRO la condición de pago
BEGIN
SELECT
@vCPgCod=PrvCPgCod
FROM safrol.DBpridat.dbo.PROVEEDO
WHERE
PrvCod IN (@vProv)
END
BEGIN
IF @vCPgCod is Null
SET @vCPgCod = '21' -- Le asigno la condición de crédito a 7 días, la que menos
-- afecte al proveedor (mayor tiempo para pagar)
END
-- Verifico los numeros de días de la condición de pago
BEGIN
SELECT @vDiasPg=CPgNroDis
FROM safrol.DBpridat.dbo.CONDPAG1
WHERE CPgCod = @vCPgCod
END
-- Calculo la fecha de vencimiento
BEGIN
SET @vFchV=CONVERT(VARCHAR(8),DATEADD(day, CAST(@vDiasPg AS NUMERIC(4)), @vDocumentDate),112)
END
-- Busco la moneda base
BEGIN
SELECT @vMoneda=symbol
FROM dbo.Currency
WHERE
CoinDataBase='0'
END
-- Busco la fecha de recepción
BEGIN
SELECT @vFchR = @RelationDate --convert(varchar(10),GETDATE(),112)
END
-- Valida Compra Gravada e inserta en la tabla de Cuentas por Pagar
IF @vVAT > 0
BEGIN
SET @vCodRetI = 'C33'
SET @vSubT = @vBase+@vExempt
SET @vSubTl= @vBase
SET @vCta = '51010102'
IF @vRif = @vRifCia -- Sucursal
BEGIN
SET @vRete = @vRet
SET @vCRet = 'RTC'
SET @vPRet = 75
SET @vBRet = @vVat
END
ELSE
BEGIN
SET @vRete = 0
SET @vCRet = 'NIVA'
SET @vPRet = 0
SET @vBRet = 0
END
--
SET @vDif = @vSubT - @vBase
IF @vDif < 0.04
BEGIN
SET @vBase = @vSubT
SET @vSubTl = @vSubT
SET @vExempt = @vAmount-(@vBase+@vVAT)
END
-- Inserta en la tabla de Cuentas por Pagar
-- Validación Afiliadas con Sucursales
IF @vCodCia='09'
BEGIN
SET @vCia=@vCodCia
SET @vSuc='TE'
SET @vCiaL=@vCodCia
SET @vSucL='TE'
END
IF @vCodCia='11'
BEGIN
SET @vCia=@vCodCia
SET @vSuc='31'
SET @vCiaL=@vCodCia
SET @vSucL='31'
END
SET @vLinea = @vLinea + 1
BEGIN TRANSACTION
Insert into AccountsPayable
(UserID, EObnNrd, EObnCiaCod, EObnSucCod,
EObnRelCod, EObnCDoCod, EObnDocNro, EObnFchDod,
EObnFchRcp, EObnFchVto, EObnCPgCod, EObnDsc,
EObnMonCod, EObnTasCam, EObnSubTot, EObnCGaCod,
EObnCdCCd, EObnCiaLin, EObnSucLin, EObnTolLin,
EObnOgn, EObnFill, EObnAnoCtb, EObnPdoCtb,
EObnCCtCtb, EObnNroCtb, EObnCtlNro, EObnTpoTrn,
EObnDscLin, EObnCDLin, EObnDocLin, EObnCRtId1,
EObnBai1, EObnPct1, EObnImpRt1, EObnCRtId7,
EObnBai7, EObnPct7, EObnImpRt7, EObnPryNro,
EObnDocPrv)
VALUES
(@pUserID, @vLinea, @vCia, @vSuc,
'PM'+@vProv, 'FCM', @vNumero, @vDocumentDate,
@vFchR, @vFchV, @vCPgCod, @vDescrip,
@vMoneda, 0, @vSubT, @vCta,
'97', @vCiaL, @vSucL, @vSubTl,
'XX', '', 0, 0,
0, 0, @vNumero, '01',
@vDescrip, 'FC', @vNumero, @vCodRetI,
@vBase, @vPorc, @vVAT, @vCRet,
@vBRet, @vPRet, @vRet, '',
@vNumeroProv)
COMMIT
-- Inicializa una variable para el valor del error para la sentencia INSERT
SELECT @ins_error = @@ERROR
-- Indica que un error ocurrió y hace rollback de la transacción
IF @ins_error <> 0
PRINT 'Un error ocurrió insertando Compra Gravada Cuentas por Pagar'
BEGIN TRANSACTION
ROLLBACK TRAN
-- Valida transacciones mixtas y obliga generar linea C30
IF @vBase > 0 and @vExempt > 0
BEGIN
SET @vVAT = 0 -- Impuesto
SET @vSubTl = @vExempt
END
END
-- Valida Compra Exenta e inserta en la tabla de Cuentas por Pagar
IF @vVAT = 0
BEGIN
BEGIN
SET @vCodRetI = 'C30'
IF @vExempt > 0 -- Es Exento
BEGIN
SET @vSubT = @vBase+@vExempt
SET @vSubTl = @vExempt
END
--
SET @vBase = 0
SET @vPorc = 0
SET @vVAT = 0
SET @vCta = '51010101'
END
-- Inserta en la tabla de Cuentas por Pagar
-- Validación Afiliadas con Sucursales
IF @vCodCia='09'
BEGIN
SET @vCia=@vCodCia
SET @vSuc='TE'
SET @vCiaL=@vCodCia
SET @vSucL='TE'
END
IF @vCodCia='11'
BEGIN
SET @vCia=@vCodCia
SET @vSuc='31'
SET @vCiaL=@vCodCia
SET @vSucL='31'
END
SET @vLinea = @vLinea + 1
BEGIN TRANSACTION
Insert into AccountsPayable
(UserID, EObnNrd, EObnCiaCod, EObnSucCod,
EObnRelCod, EObnCDoCod, EObnDocNro, EObnFchDod,
EObnFchRcp, EObnFchVto, EObnCPgCod, EObnDsc,
EObnMonCod, EObnTasCam, EObnSubTot, EObnCGaCod,
EObnCdCCd, EObnCiaLin, EObnSucLin, EObnTolLin,
EObnOgn, EObnFill, EObnAnoCtb, EObnPdoCtb,
EObnCCtCtb, EObnNroCtb, EObnCtlNro, EObnTpoTrn,
EObnDscLin, EObnCDLin, EObnDocLin, EObnCRtId1,
EObnBai1, EObnPct1, EObnImpRt1, EObnCRtId7,
EObnPryNro, EObnDocPrv)
VALUES
(@pUserID, @vLinea, @vCia, @vSuc,
'PM'+@vProv, 'FCM', @vNumero, @vDocumentDate,
@vFchR, @vFchV, @vCPgCod, @vDescrip,
@vMoneda, 0, @vSubT, @vCta,
'97', @vCiaL, @vSucL, @vSubTl,
'XX', '', 0, 0,
0, 0, @vNumero, '01',
@vDescrip, 'FC', @vNumero, @vCodRetI,
@vBase, @vPorc, @vVAT, 'NIVA',
'', @vNumeroProv)
COMMIT
-- Inicializa una variable para el valor del error para la sentencia INSERT
SELECT @ins_error = @@ERROR
-- Indica que un error ocurrió y hace rollback de la transacción
IF @ins_error <> 0
PRINT 'Un error ocurrió insertando Compra Exenta en Cuentas por Pagar'
BEGIN TRANSACTION
ROLLBACK TRAN
END
FETCH NEXT FROM C_RelationRevenue
INTO @vPharmacyID, @vProv, @vNumero,
@vDocumentDate, @vDescrip, @vAmount,
@vVAT, @RelationDate, @vNumeroProv
END
CLOSE C_RelationRevenue
DEALLOCATE C_RelationRevenue
GO
CursorFetch: the number of variables declared in the into list must match that of selected columns.
Aparentemente el error ocurre cuando el numero de variables en la sentencia INTO del Cursor no coincide con el numero de columnas seleccionadas, pero revise y tengo el mismo numero, tengo 9 variables y 9 columnas, he probado otras cosas pero nada, por favor quien tenga algo que me sirva se lo agadeceria.
El store procedure es el siguiente:
CREATE PROCEDURE sp_GeneraTrayCXP (@pUserID as VARCHAR(20),
@pPharmacyID as VARCHAR(6),
@pRelationDate as VARCHAR(8))
AS
DECLARE
@vRelationDate VARCHAR(8),
@vReceiptDate VARCHAR(8),
@vPharmacyID VARCHAR(6),
@vProv VARCHAR(10),
@vNumero VARCHAR(50),
@vNumeroProv VARCHAR(50),
@vDocumentDate VARCHAR(8),
@vCodSuc VARCHAR(3),
@vCPgCod VARCHAR(2),
@vDescrip VARCHAR(50),
@vMoneda VARCHAR(3),
@vAmount NUMERIC(16,2),
@vCuentaC NUMERIC,
@vLinea NUMERIC(18),
@vVAT NUMERIC(16,2),
@vCodRetI VARCHAR(4),
@vTaxable NUMERIC(16,2),
@vExempt NUMERIC(16,2),
@vRet NUMERIC(16,2),
@vRete NUMERIC(16,2),
@vCRet VARCHAR(4),
@vPRet NUMERIC(6,2),
@vBase NUMERIC(16,2),
@vBRet NUMERIC(16,2),
@vPorc NUMERIC(6,2),
@vMtoImp NUMERIC(16,2),
@vDiasPg VARCHAR(4),
@vFchV VARCHAR(10),
@vFchR VARCHAR(8),
@vSubT NUMERIC(16,2),
@vSubTl NUMERIC(16,2),
@vDif NUMERIC(16,2),
@vCta VARCHAR(8),
@vCodCia VARCHAR(2),
@vCia VARCHAR(2),
@vSuc VARCHAR(2),
@vCiaL VARCHAR(2),
@vSucL VARCHAR(2),
@vRifCia VARCHAR(16),
@vRif VARCHAR(16),
@ins_error int,
@RelationDate VARCHAR(8)
--Lee tabla RelationRevenue
DECLARE C_RelationRevenue CURSOR FOR
SELECT
PharmacyID,
ManufacturerID,
RIGHT(CodeAccountant,8),
DocumentDate,
REPLACE (ISNULL (Description,''),',',''),
Amount,
VAT,
RelationDate,
CodeAccountant
FROM RelationRevenue
WHERE
(PharmacyID = @pPharmacyID) AND
(RelationDate = @pRelationDate) AND
(CodeTrans IN ('112')) AND
Description <> ''
-- Abre cursor
OPEN C_RelationRevenue
FETCH NEXT FROM C_RelationRevenue INTO
@vPharmacyID, @vProv, @vNumero,
@vDocumentDate, @vDescrip, @vAmount,
@vVAT, @RelationDate, @vNumeroProv
SET @vLinea = 0
SET @vExempt = 0
WHILE @@FETCH_STATUS = 0
BEGIN
-- Calcula Tasa
SELECT @vPorc=IVAPercent
FROM dbo.IVAType
WHERE EffectiveDate=(SELECT max(EffectiveDate)
FROM dbo.IVAType
WHERE EffectiveDate<=@vDocumentDate)
-- Calcula Base y Exento
SET @vBase = (100*@vVAT)/@vPorc
SET @vExempt = @vAmount-@vBase-@vVAT
-- Busca RIF de Compañias
BEGIN
SELECT @vRifCia=RifSanfar FROM dbo.GlobalParameters
END
-- Busca datos de la Farmacia
BEGIN
SELECT @vCodSuc=id, @vCodCia=accountablecompany, @vRif=RIF
FROM dbo.Branch
WHERE pharmacyid=@vPharmacyID
END
--
IF @vRif = @vRifCia -- Sucursal
BEGIN
SET @vCia='01'
SET @vSuc='07'
SET @vCiaL='01'
SET @vSucL=@vCodSuc
END
IF @vRif <> @vRifCia -- Afiliada
BEGIN
SET @vCia=@vCodCia
SET @vSuc=@vCodCia
SET @vCiaL=@vCodCia
SET @vSucL=@vCodCia
END
-- Busca en SAFIRO la condición de pago
BEGIN
SELECT
@vCPgCod=PrvCPgCod
FROM safrol.DBpridat.dbo.PROVEEDO
WHERE
PrvCod IN (@vProv)
END
BEGIN
IF @vCPgCod is Null
SET @vCPgCod = '21' -- Le asigno la condición de crédito a 7 días, la que menos
-- afecte al proveedor (mayor tiempo para pagar)
END
-- Verifico los numeros de días de la condición de pago
BEGIN
SELECT @vDiasPg=CPgNroDis
FROM safrol.DBpridat.dbo.CONDPAG1
WHERE CPgCod = @vCPgCod
END
-- Calculo la fecha de vencimiento
BEGIN
SET @vFchV=CONVERT(VARCHAR(8),DATEADD(day, CAST(@vDiasPg AS NUMERIC(4)), @vDocumentDate),112)
END
-- Busco la moneda base
BEGIN
SELECT @vMoneda=symbol
FROM dbo.Currency
WHERE
CoinDataBase='0'
END
-- Busco la fecha de recepción
BEGIN
SELECT @vFchR = @RelationDate --convert(varchar(10),GETDATE(),112)
END
-- Valida Compra Gravada e inserta en la tabla de Cuentas por Pagar
IF @vVAT > 0
BEGIN
SET @vCodRetI = 'C33'
SET @vSubT = @vBase+@vExempt
SET @vSubTl= @vBase
SET @vCta = '51010102'
IF @vRif = @vRifCia -- Sucursal
BEGIN
SET @vRete = @vRet
SET @vCRet = 'RTC'
SET @vPRet = 75
SET @vBRet = @vVat
END
ELSE
BEGIN
SET @vRete = 0
SET @vCRet = 'NIVA'
SET @vPRet = 0
SET @vBRet = 0
END
--
SET @vDif = @vSubT - @vBase
IF @vDif < 0.04
BEGIN
SET @vBase = @vSubT
SET @vSubTl = @vSubT
SET @vExempt = @vAmount-(@vBase+@vVAT)
END
-- Inserta en la tabla de Cuentas por Pagar
-- Validación Afiliadas con Sucursales
IF @vCodCia='09'
BEGIN
SET @vCia=@vCodCia
SET @vSuc='TE'
SET @vCiaL=@vCodCia
SET @vSucL='TE'
END
IF @vCodCia='11'
BEGIN
SET @vCia=@vCodCia
SET @vSuc='31'
SET @vCiaL=@vCodCia
SET @vSucL='31'
END
SET @vLinea = @vLinea + 1
BEGIN TRANSACTION
Insert into AccountsPayable
(UserID, EObnNrd, EObnCiaCod, EObnSucCod,
EObnRelCod, EObnCDoCod, EObnDocNro, EObnFchDod,
EObnFchRcp, EObnFchVto, EObnCPgCod, EObnDsc,
EObnMonCod, EObnTasCam, EObnSubTot, EObnCGaCod,
EObnCdCCd, EObnCiaLin, EObnSucLin, EObnTolLin,
EObnOgn, EObnFill, EObnAnoCtb, EObnPdoCtb,
EObnCCtCtb, EObnNroCtb, EObnCtlNro, EObnTpoTrn,
EObnDscLin, EObnCDLin, EObnDocLin, EObnCRtId1,
EObnBai1, EObnPct1, EObnImpRt1, EObnCRtId7,
EObnBai7, EObnPct7, EObnImpRt7, EObnPryNro,
EObnDocPrv)
VALUES
(@pUserID, @vLinea, @vCia, @vSuc,
'PM'+@vProv, 'FCM', @vNumero, @vDocumentDate,
@vFchR, @vFchV, @vCPgCod, @vDescrip,
@vMoneda, 0, @vSubT, @vCta,
'97', @vCiaL, @vSucL, @vSubTl,
'XX', '', 0, 0,
0, 0, @vNumero, '01',
@vDescrip, 'FC', @vNumero, @vCodRetI,
@vBase, @vPorc, @vVAT, @vCRet,
@vBRet, @vPRet, @vRet, '',
@vNumeroProv)
COMMIT
-- Inicializa una variable para el valor del error para la sentencia INSERT
SELECT @ins_error = @@ERROR
-- Indica que un error ocurrió y hace rollback de la transacción
IF @ins_error <> 0
PRINT 'Un error ocurrió insertando Compra Gravada Cuentas por Pagar'
BEGIN TRANSACTION
ROLLBACK TRAN
-- Valida transacciones mixtas y obliga generar linea C30
IF @vBase > 0 and @vExempt > 0
BEGIN
SET @vVAT = 0 -- Impuesto
SET @vSubTl = @vExempt
END
END
-- Valida Compra Exenta e inserta en la tabla de Cuentas por Pagar
IF @vVAT = 0
BEGIN
BEGIN
SET @vCodRetI = 'C30'
IF @vExempt > 0 -- Es Exento
BEGIN
SET @vSubT = @vBase+@vExempt
SET @vSubTl = @vExempt
END
--
SET @vBase = 0
SET @vPorc = 0
SET @vVAT = 0
SET @vCta = '51010101'
END
-- Inserta en la tabla de Cuentas por Pagar
-- Validación Afiliadas con Sucursales
IF @vCodCia='09'
BEGIN
SET @vCia=@vCodCia
SET @vSuc='TE'
SET @vCiaL=@vCodCia
SET @vSucL='TE'
END
IF @vCodCia='11'
BEGIN
SET @vCia=@vCodCia
SET @vSuc='31'
SET @vCiaL=@vCodCia
SET @vSucL='31'
END
SET @vLinea = @vLinea + 1
BEGIN TRANSACTION
Insert into AccountsPayable
(UserID, EObnNrd, EObnCiaCod, EObnSucCod,
EObnRelCod, EObnCDoCod, EObnDocNro, EObnFchDod,
EObnFchRcp, EObnFchVto, EObnCPgCod, EObnDsc,
EObnMonCod, EObnTasCam, EObnSubTot, EObnCGaCod,
EObnCdCCd, EObnCiaLin, EObnSucLin, EObnTolLin,
EObnOgn, EObnFill, EObnAnoCtb, EObnPdoCtb,
EObnCCtCtb, EObnNroCtb, EObnCtlNro, EObnTpoTrn,
EObnDscLin, EObnCDLin, EObnDocLin, EObnCRtId1,
EObnBai1, EObnPct1, EObnImpRt1, EObnCRtId7,
EObnPryNro, EObnDocPrv)
VALUES
(@pUserID, @vLinea, @vCia, @vSuc,
'PM'+@vProv, 'FCM', @vNumero, @vDocumentDate,
@vFchR, @vFchV, @vCPgCod, @vDescrip,
@vMoneda, 0, @vSubT, @vCta,
'97', @vCiaL, @vSucL, @vSubTl,
'XX', '', 0, 0,
0, 0, @vNumero, '01',
@vDescrip, 'FC', @vNumero, @vCodRetI,
@vBase, @vPorc, @vVAT, 'NIVA',
'', @vNumeroProv)
COMMIT
-- Inicializa una variable para el valor del error para la sentencia INSERT
SELECT @ins_error = @@ERROR
-- Indica que un error ocurrió y hace rollback de la transacción
IF @ins_error <> 0
PRINT 'Un error ocurrió insertando Compra Exenta en Cuentas por Pagar'
BEGIN TRANSACTION
ROLLBACK TRAN
END
FETCH NEXT FROM C_RelationRevenue
INTO @vPharmacyID, @vProv, @vNumero,
@vDocumentDate, @vDescrip, @vAmount,
@vVAT, @RelationDate, @vNumeroProv
END
CLOSE C_RelationRevenue
DEALLOCATE C_RelationRevenue
GO
Valora esta pregunta


0