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

Ordenar por campo y tipo de orden recibidos en Procedimiento Almacenado

Estas en el tema de Ordenar por campo y tipo de orden recibidos en Procedimiento Almacenado en el foro de Mysql en Foros del Web. Buen día.!! Tengo el siguiente problema.. Necesito hacer un procedimiento almacenado donde el resultado del mismo debe salir ordenado por el campo y tipo de ...
  #1 (permalink)  
Antiguo 07/11/2012, 22:21
 
Fecha de Ingreso: noviembre-2009
Mensajes: 110
Antigüedad: 15 años
Puntos: 1
Ordenar por campo y tipo de orden recibidos en Procedimiento Almacenado

Buen día.!! Tengo el siguiente problema..

Necesito hacer un procedimiento almacenado donde el resultado del mismo debe salir ordenado por el campo y tipo de orden que le mando por parámetro, aquí un ejemplo mas especifico.

Código SQL:
Ver original
  1. CREATE PROCEDURE sp_mi_procedimiento(IN campo_orden VARCHAR(50), IN tipo_orden VARCHAR(5))
  2. BEGIN
  3.   SELECT * FROM usuario ORDER BY campo_orden tipo_orden;
  4. END;

y para llamarlo seria así:

Código SQL:
Ver original
  1. CALL sp_mi_procedimiento('nombre','ASC');
  2. // O también
  3. CALL sp_mi_procedimiento('id','DESC');

Me marca el siguiente problema al querer guardar mi procedimiento almacenado

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'tipo_orden

Alguna idea para resolver este problema, agradezco ampliamente cualquier ayuda?
  #2 (permalink)  
Antiguo 08/11/2012, 06:55
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años, 8 meses
Puntos: 47
Respuesta: Ordenar por campo y tipo de orden recibidos en Procedimiento Almacenado

Podes probar con consultas preparadas por ej:

Código MySQL:
Ver original
  1. CREATE PROCEDURE sp_mi_procedimiento(IN campo_orden varchar(50), IN tipo_orden varchar(5))
  2.     BEGIN
  3.         SET @s = CONCAT('SELECT * FROM usuario ORDER BY ',campo_orden,' ',tipo_orden);
  4.         PREPARE stmt2 FROM @s;
  5.         EXECUTE stmt2;
  6. DEALLOCATE PREPARE stmt2;
  7.     END;

Ejemplo General Para Probar En Workbench Sin El Stored Procedure

Código MySQL:
Ver original
  1. SET @campo = 'idUsuario';
  2. SET @tipo = 'DESC';
  3. SET @s = CONCAT('SELECT * FROM usuario ORDER BY ',@campo,' ',@tipo);
  4. PREPARE stmt2 FROM @s;
  5. EXECUTE stmt2;
  6. DEALLOCATE PREPARE stmt2;

Saludos!
  #3 (permalink)  
Antiguo 08/11/2012, 07:13
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: Ordenar por campo y tipo de orden recibidos en Procedimiento Almacenado

Sentencias preparadas son el único método para hacer lo que quieres.
Prueba lo que te pasó @djaevi.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 08/11/2012, 15:57
 
Fecha de Ingreso: noviembre-2009
Mensajes: 110
Antigüedad: 15 años
Puntos: 1
Respuesta: Ordenar por campo y tipo de orden recibidos en Procedimiento Almacenado

Muchas gracias por sus respuestas, les comento como me fue:

Probe con esto:

Código SQL:
Ver original
  1. SET @campo = 'municipio';
  2. SET @orden = 'ASC';
  3. SET @s = CONCAT('SELECT * FROM municipio ORDER BY ',@campo,' ',@orden);
  4. PREPARE stmt2 FROM @s;
  5. EXECUTE stmt2;
  6. DEALLOCATE PREPARE stmt2;

y me arroja el siguiente error

>[Error] Líneas de script: 4-9 ----------------------
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @orden = 'ASC';
SET @s = CONCAT('SELECT * FROM municipio ORDER BY ',@campo,'' at line 2


y estas advertencias

Advertencias: --->
W (1): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @orden = 'ASC';
SET @s = CONCAT('SELECT * FROM municipio ORDER BY ',@campo,'' at line 2
  #5 (permalink)  
Antiguo 15/11/2012, 10:57
 
Fecha de Ingreso: noviembre-2009
Mensajes: 110
Antigüedad: 15 años
Puntos: 1
Respuesta: Ordenar por campo y tipo de orden recibidos en Procedimiento Almacenado

Hola amigo, espero puedas seguir apoyándome, hice lo que me indicaste y abajo describo como me fue.. Saludos
  #6 (permalink)  
Antiguo 15/11/2012, 11:24
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: Ordenar por campo y tipo de orden recibidos en Procedimiento Almacenado

Veo esta noche. Ahora no tengo MySQL en la oficina.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 15/11/2012, 11:30
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años, 8 meses
Puntos: 47
Respuesta: Ordenar por campo y tipo de orden recibidos en Procedimiento Almacenado

Coloca el codigo completo del stored procedure quiza el error este en otro lado, es raro porque te pase un ejemplo que prepare para pasarte y lo probe en mi workbench y funcionaba :S

Etiquetas: procedimiento_almacenado
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 00:20.