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

Select en Procedimiento Almacenado

Estas en el tema de Select en Procedimiento Almacenado en el foro de Mysql en Foros del Web. Hola, Me gustaria saber de que forma puedo crear un SELECT en MySQL en el cual sea posible consultar una tabla de base de datos ...
  #1 (permalink)  
Antiguo 10/10/2012, 13:49
 
Fecha de Ingreso: noviembre-2006
Ubicación: Pasto
Mensajes: 154
Antigüedad: 17 años, 4 meses
Puntos: 1
Pregunta Select en Procedimiento Almacenado

Hola,

Me gustaria saber de que forma puedo crear un SELECT en MySQL en el cual sea posible consultar una tabla de base de datos que me permita:

1. Si le mando por lo menos un parametro de la tabla me realice la consulta segun ese parametro.
2. Si no le mando ningun parametro que me traiga todos los registros de esa tabla.

Eso mismo logre hacer en un proyecto hace algunos anios pero en SQL Server y quisiera tener el mismo resultado pero en MySQL aqui les doy un ejemplo:

Código PHP:

SELECT cod_gen
nom_gen 
FROM dbo
.hv_tipo_general 
WHERE cod_gen
=isnull(@p_cod_gen,cod_gen)
AND    
nom_gen=isnull(@p_nom_gen,nom_gen
Hay alguna forma de hacer esto?

Gracias!
  #2 (permalink)  
Antiguo 10/10/2012, 14:12
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, 4 meses
Puntos: 2658
Respuesta: Select en Procedimiento Almacenado

Partamos de un dato elemental: Un SP que tiene parámetros definidos, debe forzosamente recibir parámetros. Siempre.
Lo que peudes hacer es enviar NULL como valor de parámetro, y en ese caso lo que se hace, sea MySQL o sea otro DBMS es evaluar si el paráemtro es o no NULL y proceder en consecuencia:


Código MySQL:
Ver original
  1. DELIMTER $$
  2.  
  3.  
  4. CREATE PROCEDURES abcd(IN par1 [tipo de dato]... parametros...)
  5.     IF par1 IS NOT NULL THEN
  6.         SELECT ...
  7.         FROM ...
  8.         WHERE ...;
  9.     ELSE
  10.         SELECT...
  11.         FROM...
  12.         WHERE...;
  13.     END IF;
  14. END$$
__________________
¿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 10/10/2012, 14:30
 
Fecha de Ingreso: noviembre-2006
Ubicación: Pasto
Mensajes: 154
Antigüedad: 17 años, 4 meses
Puntos: 1
Respuesta: Select en Procedimiento Almacenado

En SQL Server es posible... si los parametros reciben NULL con el select que puse de ejemplo me trae todos los registros de la tabla:

Código PHP:
EXEC dbo.pro_dml_tipo_general @p_cod_gen=null, @p_nom_gen null, @p_tipo_op='S'
Si en cambio le mando el codigo = 1:

Código PHP:
EXEC dbo.pro_dml_tipo_general @p_cod_gen=1, @p_nom_gen null, @p_tipo_op='S'
me trae solo el registro que sea de codigo = 1.

Necesito hacer lo mismo pero en MySQL! Espero que alguien pueda ayudarme.

@p_tipo_op = 'S' hace referencia a realizar un Select en dicho procedimiento almacenado ya que aqui tengo todas las operaciones (select, insert, delete, update) y las controlo con una serie de IF.
  #4 (permalink)  
Antiguo 10/10/2012, 14:39
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, 4 meses
Puntos: 2658
Respuesta: Select en Procedimiento Almacenado

Recuerda que no existe un PL/SQL estándar, por lo que para hacerlo dentro de otro DBMS tienes que olvidarte de todas las reglas aprendidas para el otro.
¿Entendiste lo que yo te plantee?
__________________
¿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 10/10/2012, 14:45
 
Fecha de Ingreso: noviembre-2006
Ubicación: Pasto
Mensajes: 154
Antigüedad: 17 años, 4 meses
Puntos: 1
Respuesta: Select en Procedimiento Almacenado

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Recuerda que no existe un PL/SQL estándar, por lo que para hacerlo dentro de otro DBMS tienes que olvidarte de todas las reglas aprendidas para el otro.
¿Entendiste lo que yo te plantee?
Gracias por tu respuesta, tengo claro que las reglas pueden cambiar y pues en este caso los nombres de las funciones. Lo que tu me planteaste era mi ultima opcion puesto que necesito hacer un procedimiento almacenado por cada tabla y algunas de ellas tienen demasiados campos por lo tanto el codigo seria bastante extenso.

Acabo de encontrar la funcion equivalente en MySQL la cual cambia un poco y es "IFNULL(expr1, expr2)" y hace lo mismo que hace la funcion "ISNULL(expr1, expr2)" de SQL Server.

Mil gracias por su colaboracion!
  #6 (permalink)  
Antiguo 10/10/2012, 15:01
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, 4 meses
Puntos: 2658
Respuesta: Select en Procedimiento Almacenado

Es posible crear un SP donde puedas parametrizar los campos y las tablas a consultar.
Para eso existen las sentencias preparadas, y se puede usar un SP para manipularlo todo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: procedimiento, registros, select, sql, tabla, tipo, almacenar
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 22:52.