Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problemas con un Procedimiento con cursor

Estas en el tema de Problemas con un Procedimiento con cursor en el foro de SQL Server en Foros del Web. Hola a todos. Tengo un procedimiento que recoge 3 variables y se encarga de insertar en la tabla "Dieta_Animal_FechaInicio" registros de animales que pesen menos ...
  #1 (permalink)  
Antiguo 21/06/2011, 17:42
 
Fecha de Ingreso: abril-2006
Mensajes: 205
Antigüedad: 18 años
Puntos: 0
Problemas con un Procedimiento con cursor

Hola a todos. Tengo un procedimiento que recoge 3 variables y se encarga de insertar en la tabla "Dieta_Animal_FechaInicio" registros de animales que pesen menos que el peso mandado desde el procedimiento. Para ello el cursor recorre la otra tabla que posee información de todos los animales y su peso:

ALTER PROCEDURE DietaEspecial
@cod_dieta int,
@tipo_animal varchar(20),
@peso numeric(10,2)
AS
--Declaración de las variables del cursor
DECLARE
@codigo_del_animal varchar(10),
@peso_del_animal numeric(10,2)
--Declaración del cursor
DECLARE animales CURSOR FOR
SELECT cod_animal, peso
FROM animal
WHERE tipo_animal = @tipo_animal
OPEN animales
--Lectura de la primera fila del cursor
FETCH animales INTO @codigo_del_animal, @peso_del_animal
WHILE (@@FETCH_STATUS = 0)

BEGIN
SET NOCOUNT ON;
-- Insertamos la consulta que nos devuelve los animales que pesan menos que @peso
IF (@peso_del_animal < @peso)
INSERT INTO Dieta_Animal_FechaInicio (cod_animal,fecha_inicio,cod_dieta,od_resultado)
VALUES(@codigo_del_animal,GETDATE(),@cod_dieta,'Di eta Especial para coger Peso')
FETCH animales INTO @codigo_del_animal, @peso_del_animal
END
--Cerrar el cursor
CLOSE animales
--Liberar los recursos
DEALLOCATE animales
GO




Cuando le doy a analizar me dice que no hay ningun problema en la consulta (Executed, pero a la hora de ejecutarla no me deja. Me sale un error del tipo: "El nombre del objeto 'DietaEspecial' no es válido. He probado cambiando el nombre del procedimiento y nada. Por favor, estoy desesperado a ver si alguien da con el error.....
  #2 (permalink)  
Antiguo 21/06/2011, 17:57
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con un Procedimiento con cursor

No necesitas un cursor para realizar dicha operacion, ya que no haces nada con el registro en cuestion, ¿porque no lo insertas de forma directa sin cursores?, ¿cual es la razon del cursor?
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 21/06/2011, 17:57
 
Fecha de Ingreso: abril-2006
Mensajes: 205
Antigüedad: 18 años
Puntos: 0
Respuesta: Problemas con un Procedimiento con cursor

joe... ya he encontrado el error: no es ALTER sino CREATE

Me estaba volviendo loco. Bueno lo dejo ahí por si alguien le sirve de ayuda.
  #4 (permalink)  
Antiguo 21/06/2011, 17:58
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con un Procedimiento con cursor

Como te digo, los cursores NO SON RECOMENDADOS en SQL Server, podrias llegar a "tirar" la operacion de tu servidor, en fin.....
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 21/06/2011, 18:00
 
Fecha de Ingreso: abril-2006
Mensajes: 205
Antigüedad: 18 años
Puntos: 0
Respuesta: Problemas con un Procedimiento con cursor

Si necesito el cursor porque la tabla Animal tiene la columna peso que no está en la tabla Dieta_Animal_FechaInicio. Es recorrerme 2 tablas (una para sacar el codigo del animal y su peso, y la otra para actualizar los registros que cumplen la condicion)
  #6 (permalink)  
Antiguo 21/06/2011, 18:01
 
Fecha de Ingreso: abril-2006
Mensajes: 205
Antigüedad: 18 años
Puntos: 0
Respuesta: Problemas con un Procedimiento con cursor

Entonces que me recomiendas para ir comparando 2 valores de 2 tablas distintas?
  #7 (permalink)  
Antiguo 21/06/2011, 18:03
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con un Procedimiento con cursor

INSERT INTO tutabla1
FROM tutabla1 t1 join tutabla2 t2
WHERE t1.peso <> t2.peso

Simple y sencillo
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 21/06/2011, 18:22
 
Fecha de Ingreso: abril-2006
Mensajes: 205
Antigüedad: 18 años
Puntos: 0
Respuesta: Problemas con un Procedimiento con cursor

no se exactamente como lo tendría que aplicar.....

la tabla Animal sería: Animal(cod_animal, tipo_animal, peso)
y la tabla Dieta_Animal_Fecha es: Dieta_Animal_Fecha(cod_animal,fecha_inicio,cod_dieta)

Entonces el usuario introduce el tipo_animal (por ejemplo 'cerdo'), el cod_dieta(por ejemplo 'engordar') y el peso por el cual empezaría esa dieta (por ejemplo 45kg). En el ejemplo que te he puesto, la consulta debe ser: "Actualizar de la tabla 'Dieta_Animal_Fecha' todos los cerdos que pesen menos de 45 kg, poniendo en su campo cod_dieta = 'engordar'.

Puede haber muchos animales (con su codigo de animal 'cod_animal) del tipo cerdo que no lleguen a 45kg. Por lo tanto la actualización de esa tabla no es inmediata.
  #9 (permalink)  
Antiguo 22/06/2011, 09:33
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas con un Procedimiento con cursor

Con toda tu explicacion has dado la solucion, solo debes llevarla a codigo, pero NUNCA con cursores.
__________________
MCTS Isaias Islas

Etiquetas: cursor, procedimiento
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:31.