Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-09-2005
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Question 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..
__________________
No todo es como parece ser...
Responder Con Cita
  #2  
Antiguo 05-09-2005
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
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.
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #3  
Antiguo 05-09-2005
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
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....

__________________
No todo es como parece ser...
Responder Con Cita
  #4  
Antiguo 05-10-2005
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 19
Chente(rMan) Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 05-10-2005
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
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.

__________________
No todo es como parece ser...
Responder Con Cita
  #6  
Antiguo 05-10-2005
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 19
Chente(rMan) Va por buen camino
pues no hay problema si son 1,000, dime si funciona con el codigo que te di...



Saludos.

Última edición por Chente(rMan) fecha: 05-10-2005 a las 16:11:16.
Responder Con Cita
  #7  
Antiguo 05-10-2005
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
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...
__________________
No todo es como parece ser...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:11:35.


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