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

[SOLUCIONADO] Problema con proceso almacenado con variables

Estas en el tema de Problema con proceso almacenado con variables en el foro de Mysql en Foros del Web. Hola, soy programador de otros lenguajes y toco de oído MySql, pero un proyecto hizo que necesite meterme con este grande. Tengo una tabla con ...
  #1 (permalink)  
Antiguo 14/03/2014, 21:01
Avatar de piojoman  
Fecha de Ingreso: enero-2005
Ubicación: Argentina
Mensajes: 224
Antigüedad: 19 años, 11 meses
Puntos: 3
Problema con proceso almacenado con variables

Hola, soy programador de otros lenguajes y toco de oído MySql, pero un proyecto hizo que necesite meterme con este grande.

Tengo una tabla con la siguiente estructura


M500 y M200 son sucursales, pueden existir mas o menos. El campo M500S muestra el stock teorico de la sucursal M500, M500C son los productos contados físicamente del stock y M500E muestra con 0 si no esta exhibido y 1 si lo esta. Con cada sucursal se repite el sistema.

Hice un procedimiento almacenado pero como parámetro me gustaría pasar la suc y no M500S, M500C, etc.

El problema surge en que no se hacer una consulta INSERT del tipo

INSERT INTO stock (`material`, suc + 'S', suc + 'P',suc + 'E') VALUE (material,0,0,0);

Ya se que no se puede usar el sigo +, y probe con CONCAT pero siempre me arroja un error.

¿Como se debe resolver este problema?
  #2 (permalink)  
Antiguo 14/03/2014, 21:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con proceso almacenado con variables

No se puede construir los nombres de columnas o tablas en forma dinámica de ese modo si usar sentencias preparadas. MySQL no lo admite (de hecho , creo que ningún DBMS lo admite).
http://dev.mysql.com/doc/refman/5.0/es/sqlps.html
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/03/2014, 22:02
Avatar de piojoman  
Fecha de Ingreso: enero-2005
Ubicación: Argentina
Mensajes: 224
Antigüedad: 19 años, 11 meses
Puntos: 3
Respuesta: Problema con proceso almacenado con variables

Ok, muchas gracias. La solución básica y sencilla y unica que me queda para no romper con la estructura imagino que sera pasar tres parámetros al proceso almacenado.

No era lo ideal pero viendo que la forma "prolija" no se puede.... gracias por la pronta respuesta gnzsoloyo.

Saludos
  #4 (permalink)  
Antiguo 17/03/2014, 14:28
Avatar de piojoman  
Fecha de Ingreso: enero-2005
Ubicación: Argentina
Mensajes: 224
Antigüedad: 19 años, 11 meses
Puntos: 3
Respuesta: Problema con proceso almacenado con variables

Buenas, encontre la solucion a mi propia consulta por ahi en internet y la publico por si alguien la necesitaba.

Solo era necesario poner la sentencia en una variable usando CONCAT y utilizar PREPARE, para ejecutarlo con EXECUTE:

Aclaro los parámetros de este ejemplo son MSUC (que se utiliza para identificar dos campos distintos - msucP y msucE) y MAT.


Código MySQL:
Ver original
  1.  
  2. set @d = concat('UPDATE stock SET ',Msuc,'P= 0, ',Msuc,'E= 0 WHERE material=',mat,';');
  3.  
  4. PREPARE stmt2 FROM @d;
  5. EXECUTE stmt2;
  6. DROP PREPARE stmt2;
  7.  

Saludos!

Última edición por gnzsoloyo; 17/03/2014 a las 14:37
  #5 (permalink)  
Antiguo 17/03/2014, 14:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con proceso almacenado con variables


¿En serio tuviste que bsucar "por ahi en internet "?
¿Ni siquiera te molestaste en leer lo que te puse?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No se puede construir los nombres de columnas o tablas en forma dinámica de ese modo sin usar sentencias preparadas. MySQL no lo admite (de hecho , creo que ningún DBMS lo admite).
http://dev.mysql.com/doc/refman/5.0/es/sqlps.html


AL menos hubieses mirado el link...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 17/03/2014, 18:23
Avatar de piojoman  
Fecha de Ingreso: enero-2005
Ubicación: Argentina
Mensajes: 224
Antigüedad: 19 años, 11 meses
Puntos: 3
Respuesta: Problema con proceso almacenado con variables

Jajaja tenes razón, mas cara dura que yo no hay.


En realidad leí tu respuesta...

Cita:
No se puede construir los nombres de columnas o tablas en forma dinámica de ese modo si usar sentencias preparadas. MySQL no lo admite (de hecho , creo que ningún DBMS lo admite).
Dije mmm... que mal....

Mire el link... pero en mysql todo daba error o no levantaba los datos. Me acoste deje descansar la cabeza y al otro día vi un ejemplo por "ahi". Literalmente lo copie, pegue funciono y de la emoción lo puse como respuesta.

Ahora que veo tu comentario, abri nuevamente el link y dije.... tiene razón, si me habré enojado cuando me hacieron esto a mi.

Publicamente pido disculpas...

Etiquetas: almacenado, concat, concatenar, 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 08:38.