Bueno, por lo que dices, el SGBD que estás usando
es MySQL (aunque muchos duden, es por definición un DBMS).
En segundo lugar, el problema, tal y como lo planteas, es mucho más simple de realizar desde una consulta construida en la aplicación y simplemente ejecutada en la base de datos.
Esto es porque el proceso, si bien se puede hacer en un SP, es un poquito complejo y con algunos problemas...
Partiendo de la base que un motor de base de datos no programa selecciones en pantalla, sino que responde a consultas, lo que te conviene hacer es simplemente preparar el formulario para realizar la selección del criterio de reordenamiento, y colocar el campo en cuestión e
n el final del string de la consulta.
Código sql:
Ver originalSELECT *
FROM TABLA
ORDER BY nombre_campo_agregado_por_codigo;
Si aún así quieres hacerlo en un SP, hay dos formas básicas:
1. Construir un conjunto de selección por parámetros numéricos:
Código sql:
Ver originalCASE opcion
WHEN opcion = 1 THEN
...
WHEN opcion = 2 THEN
...
WHEN opcion = 3 THEN
...
WHEN opcion = 4 THEN
...
ELSE
...
END CASE;
Donde en cada segmento ejecutarías un ordenamiento diferente. El parámetro
opcion debería ser, entonces, el parámetro ingresado al SP.
2) Parametrizar la entrada permitiendo que ingrese en una variable VARCHAR un string conteniendo el/los campos de ordenamiento.
Esto implica:
- Crear el procedure parametrizado.
- Cargar una variable de tipo user con una sentencia.
- Crear una sentencia preparada sobre la base de la variable.
- Ejecutar la sentencia preparada contra una tabla temporal.
- Dropear la sentencia preparada.
- Ejecutar un select contra la tabla temporal.
El problema que yo me he encontrado es que pasar como parámetro un string conteniendo un conjunto de campos es bastante complicado de calibrar. No es un método que recomendaría para empezar a bucear en los SP.