Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Dos cursores a la vez (https://www.clubdelphi.com/foros/showthread.php?t=24882)

lucasarts_18 05-09-2005 17:54:11

Dos cursores a la vez
 
Hola Amigos:

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

Código SQL [-]
 
 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

Cita:

Empezado por hector
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.

Código SQL [-]
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

Cita:

Empezado por Chente(rMan)

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

Cita:

Empezado por Chente(rMan)
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...


La franja horaria es GMT +2. Ahora son las 06:03:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi