PDA

Ver la Versión Completa : Dos cursores a la vez


lucasarts_18
05-09-2005, 17:54:11
Hola Amigos:

Tengo problema al momento de colocar dos cursores en un mismo procedimiento almacenado.



CREATE PROCEDURE InsertarArticulos

@CODPROD VARCHAR(30),
@Tabla VARCHAR(15)

AS
BEGIN
DECLARE @Pais smallint,
@Local smallint,
@Sku varchar(15),
@Descripcion varchar(50),
@Precio_Regular decimal(10,2),
@Precio_Oferta decimal(10,2),
@Flag_Precio char(1),
@Enviado bit,
@Tipo_Operacion char(1)


IF @Tabla = 'MARTICULOS'
BEGIN
DECLARE CurMaestroArticulos cursor for
SELECT ITEMNMBR,
ITEMDESC
FROM IV00101
WHERE ITEMNMBR = @CODPROD

OPEN CurMaestroArticulos
WHILE @@FETCH_STATUS = 0
BEGIN
Fetch Next From CurMaestroArticulos
Into @Sku,
@Descripcion

Insert into OUT_ARTICULOS(Sku,
Descripcion)
values (@Sku,
@Descripcion)

END
CLOSE CurMaestroArticulos
DEALLOCATE CurMaestroArticulos
END
IF @TABLA = 'Precios'
BEGIN
DECLARE @PRECIOS cursor for
SELECT UOMPRICE
FROM IV00108
WHERE ITEMNMBR = @CODPROD

OPEN @PRECIOS
WHILE @@FETCH_STATUS = 0
BEGIN
Fetch Next From @PRECIOS
Into @Precio_Regular

Insert into OUT_ARTICULOS(Precio_Regular)
values (@Precio_Regular)

END
CLOSE @PRECIOS
DEALLOCATE @PRECIOS
END

END



Si yo quito todo el código que viene despues del IF Table = 'Precios', compila bien el procedimiento.
El error de compilación que sale ahora con el código de arriba es el siguiente.

Incorrect syntax near the keyword 'for'

Espero sus ayudas nuevamente amigos.

Un Saludo y Gracias por todo..

__hector
05-09-2005, 18:20:21
creo que en la segunda sentencia, donde dices DECLARE @PRECIOS , el arroba va de más. No estoy seguro, pero me parece que los cursores no puedes declararlos con el arroba delante.

lucasarts_18
05-09-2005, 20:37:31
creo que en la segunda sentencia, donde dices DECLARE @PRECIOS , el arroba va de más.
Hola hector, gracias por responder, y diste en el clavo, ahora compilo sin ningún problema..

Gracias....

;)

Chente(rMan)
05-10-2005, 05:37:43
Que tal Lucas, yo no recomiendo mucho el uso de cursores, si puedes evitarlo mejor ya que degrada bastante el rendimiento del servidor, si le entiendo bien a lo que quieres hacer, podrias hacerlo de la siguiente manera.


CREATE PROCEDURE InsertarArticulos
@CODPROD VARCHAR(30),
@Tabla VARCHAR(15)
AS
BEGIN
IF @Tabla = 'MARTICULOS'
BEGIN
Insert into OUT_ARTICULOS(Sku, Descripcion)
select itemnmbr, itemdesc from iv00101 where itemnmbr = @codprod
END
else IF @TABLA = 'Precios'
BEGIN
Insert into OUT_ARTICULOS(Precio_Regular)
select uomprice from iv00108 where itemnmbr = @codprod
END


Y recuerda, ;) NADA DE CURSORES, siempre y cuando se pueda hacer de otra forma.


Saludos.

Vicente López.

lucasarts_18
05-10-2005, 16:05:32
Y recuerda, ;) NADA DE CURSORES, siempre y cuando se pueda hacer de otra forma.

Hola:

Con respecto a esto he leído en varias web que no es recomendable por el mismo motivo que dices tú, pero no he leído como hacerlo si tienes que procesar 1000 registros, aquí en mi caso es muy necesario los cursores, además este problema se lo achacan a SQL Server no más, para oracle se usan muchos los cursores y no leído nada en contra sobre esto...

Espero algún día entender como lo hago con estos problemas.

:(

Chente(rMan)
05-10-2005, 16:08:59
pues no hay problema si son 1,000, dime si funciona con el codigo que te di...



Saludos.

lucasarts_18
05-10-2005, 16:33:46
dime si funciona con el codigo que te di...

Hola amigo, me temo que no se puede, es decir ya no tengo acceso al servidor donde quedo implementado, en todo caso cualquier cosa que sepas al respecto me avisas,es un tema a tener en cuanta sobre SQL Server...

Saludos...