SQL - ERROR the number of variables declared in the into

 
Vista:

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ERROR the number of variables declared in the i

Publicado por Phoebe (2 intervenciones) el 11/06/2009 23:59:14
Al Chico q se comunico, si quito el cuerpo de procesos con tabla entonces
quedaria el siguiente query:

CREATE PROCEDURE sp_GeneraTrayCXP (@pUserID as VARCHAR(20),
@pPharmacyID as CHAR(6),
@pRelationDate as VARCHAR(8))
AS
DECLARE
--@vRelationDate CHAR(8),
@vReceiptDate VARCHAR(8),
@vPharmacyID CHAR(6),
@vProv CHAR(10),
@vNumero VARCHAR(50),
@vNumeroProv VARCHAR(50),
@vDocumentDate CHAR(8),
@vCodSuc VARCHAR(3),
@vCPgCod VARCHAR(2),
@vDescrip VARCHAR(50),
@vMoneda VARCHAR(3),
@vAmount MONEY,
@vCuentaC NUMERIC,
@vLinea NUMERIC(18),
@vVAT MONEY,
@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 CHAR(8)

--Lee tabla RelationRevenue
DECLARE C_RelationRevenue CURSOR keyset FOR
SELECT
PharmacyID,
ManufacturerID,
RIGHT(CodeAccountant,8),
DocumentDate,
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

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 respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ERROR the number of variables declared in the i

Publicado por fernando (1 intervención) el 04/12/2011 03:56:51
mira este esta hecho en sql server 2008 y si funciona- podes guiarte con este- SALUDOS

if object_id('mostrar') is not null drop table mostrar;

go
declare mostrar cursor for
select e.nrofact,e.fecha,e.total,e.codsoc,d.codprod,d.PUpagado,d.cantidad from encabezado as e, detalle as d where (e.nrofact=d.nrofact and e.fecha='9/30/2011');
declare @nrofact int,@fecha date,@total float,@codsoc int,@codprod int,@PUpagado float,@cantidad int
open mostrar;
fetch mostrar into @nrofact,@fecha,@total,@codsoc,@codprod,@PUpagado,@cantidad
while @@FETCH_STATUS=0
begin
select @nrofact as numfact,@fecha as fecha,@total as total,@codsoc as codsocio,@codprod as codproducto,@PUpagado as precioprod,@cantidad as cantidad
fetch mostrar into @nrofact,@fecha,@total,@codsoc,@codprod,@PUpagado,@cantidad
end;
close mostrar

deallocate mostrar;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar