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

update q nose si es posible arroja error:Unknown column 'var_oden' in 'where clause'

Estas en el tema de update q nose si es posible arroja error:Unknown column 'var_oden' in 'where clause' en el foro de Mysql en Foros del Web. tengo una tabla varios que se compone de un campo id , otro fk y otro int llamado orden, cuando se elimina un registro necesito ...
  #1 (permalink)  
Antiguo 05/03/2012, 12:14
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 14 años
Puntos: 1
update q nose si es posible arroja error:Unknown column 'var_oden' in 'where clause'

tengo una tabla varios que se compone de un campo id , otro fk y otro int llamado orden, cuando se elimina un registro necesito que todos los que tengan un orden mayor, se les reste 1 para reordenarlos y que no queden saltos en la secuencia de orden.

Ej:
1-1-1
2-2-2
3-3-3
Borro el id=1 por lo tanto:
- El 2-2-2 pasa a ser 2-2-1 y el 3-3-3 pasa a ser el 3-3-2.

Para ello tengo una variable var_orden que tiene el orden del registro a borrar en nuestro caso valdria1.
Mi pregunta es puedo hacer este update o Orden=Orden-1 no es valido , y deberia primero obtener el orden de cada registro para luego por mediod e una variable decrementarlo? Y en cualquier caso, porque me devuelve ese error si var_orden es una variable?
Código:
  update varios set Orden=Orden-1 where Orden>var_oden;
Unknown column 'var_oden' in 'where clause'

Codigo completo sp:

Código:
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `VariosBorrar`(out res int,
in in_nombre varchar(45))
BEGIN
DECLARE existe INT;
declare var_orden int;
SET existe = 0;
SELECT idVarios INTO existe FROM varios WHERE Articulos_idArticulos=(select idArticulos from articulos where Nombre=in_nombre);
IF (existe > 0) THEN
  /* Reordeno los que tienen un mayor orden, para ellos selecciono el orden del reg a borrar, la guardo en var_orden, 
  y le doy un orden=0 , para poder reordenar las demas puesto que el Orden es Unique*/
  select Orden into var_orden from varios where idVarios=existe;
  update varios set Orden=0 where Idvarios=existe;
  update varios set Orden=Orden-1 where Orden>var_oden;
  
  delete  from  varios where idVarios=existe;
  SET res = 0;
ELSE
	SET res = 1;
END IF;
END
  #2 (permalink)  
Antiguo 06/03/2012, 01:01
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: update q nose si es posible arroja error:Unknown column 'var_oden' in 'whe

Si var_orden es una variable debes acceder con la sintaxis @var_orden.
Saludos, http://barcoavenus.blog.com/2010/12/...ados-en-mysql/
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 06/03/2012, 02:28
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 14 años
Puntos: 1
Respuesta: update q nose si es posible arroja error:Unknown column 'var_oden' in 'whe

no entiendo el porque, uso variables sin @ en todos mi sp y no dan problemas, por lo tanto solo seria en clausulas where? aparte de esto supongo que solucionare todo el problema con un cursor y un loop... gracias.
  #4 (permalink)  
Antiguo 06/03/2012, 04:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: update q nose si es posible arroja error:Unknown column 'var_oden' in 'whe

Es que te falta un detalle: Dentro de un SP, las variables son locales y no llevan prefijos. Se declaran con tipo de dato y sólo existen durante el período de ejecución.
En cambio, fuera de un SP, sólo existen las variables de usuario, que tienen algunas características propias:
1) No se declaran.
2) No tienen tipo de dato.
3) Se identifican por usar el prefijo "@".
4) Su valor inicial es NULL.
5) Para ser usadas, primero deben ser inicializadas con un valor del mismo tipo con el que se usará.
6) Dependen del entorno de la conexión, por lo que mueren si se cierra la conexión, y dos conexiones pueden usar el mismo nombre de variable sin entrar en conflicto. Esto es válido aún si las conexiones son del mismo usuario.
7) Conservan su último valor durante todo el tiempo de existencia de la conexión, por lo que debe tener cuidado de reinicializarla cada vez que se la use.
8) Las variables de usuario existen fuera del entorno de un SP, pero pueden ser usados dentro de el, teniendo ciertas precauciones, pero a diferencia de las locales, siguen existiendo luego de terminar la ejecución del SP, aunque se creen dentro de el.

Ahora bien, en realidad tu problema en ese SP, es que que estás declarando "var_orden" y usando "var_oden", que no es el mismo nombre... le falta una "r".
Cita:
tengo una tabla varios que se compone de un campo id , otro fk y otro int llamado orden, cuando se elimina un registro necesito que todos los que tengan un orden mayor, se les reste 1 para reordenarlos y que no queden saltos en la secuencia de orden.
Disculpame, pero esto que planteas no sólo es una tarea sin utilidad, ni siquiera es necesaria, porque no se necesita hacer eso para obtener un numerado secuenciado de una consulta.
Además, ¿Qué utilidad tiene? Si lo único que necesitas es que el orden sea secuencialmente correcto.
¿Para qué quieres hacer ese numerado? ¿Para que quede bonito? Eso lo podrías hacer en la página y no hacer tareas antiperformantes en la base.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 06/03/2012, 10:16
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 14 años
Puntos: 1
Respuesta: update q nose si es posible arroja error:Unknown column 'var_oden' in 'whe

gracias por todo :) , es util puesto que ese orden es el que usa el admin del sitio desde el back end para elegir como se mostraran en el front los items, por eso debe quedar numerado de manera secuencial al borrar uno, sino luego el no podria ordenarlos como guste que se muestren, puesto que habria saltos.

Un saludo.

Última edición por ferminako; 06/03/2012 a las 11:32

Etiquetas: column, nose, posible, select, tabla, update, campos
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 18:53.