MySQL - Duda - Regresar valores con Proc. Almacenado

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
Avatar de Usuario
Nagual
Forista Distinguido
Forista Distinguido
Mensajes: 1001
Registrado: Vie Jul 01, 2005 7:00 am
Ubicación: Oaxaca, Mexico

MySQL - Duda - Regresar valores con Proc. Almacenado

Mensaje por Nagual » Lun Jul 06, 2009 9:12 pm

Hola a todos
Buen dia

he estado tratando de entender como realizar un procedimiento que me pueda regresar una lista de valores de dos tablas, pero la segunda puede regresar un campo NULL...

en forma general, las tablas son:
aspirantes(id,nombre, apellidos)
pago_aspirantes(idaspirante,idpagotipo)

y quiero que regrese:
Nombe ------------------ | ---------- Pagado
Juan Perez Campos ------------------ SI
Luis Miguel Rey ------------------------NO

donde SI o NO depende que se encuentre el id del aspirante en el campo idaspirante de pago_aspirantes, cuando exista asignar SI, cuando sea NULL asignar NO a una variable y la ponga en la fila respectiva de el conjunto de resultados....

he visto la documentacion de MySQL, he buscado ejemplos e informacion en foros y otras paginas, en EL no encontre nada que me orientara....

he tratado de "adaptar" algunos ejemplos que tengo de InterBase/FireBird a MySQL pero no permite el uso del FOR para una consulta...

algo como este:

Código: Seleccionar todo

set term !!;
create procedure PeriodoCompra(pidCliente INTEGER, pInicio DATE, pTermino DATE)
returns(psDescripcion VARCHAR(30), psCantidad INTEGER, psPrecio FLOAT)
as
  declare variable vidVenta INTEGER;
  declare variable vidcliente INTEGER;
  declare variable vidProd INTEGER;
  declare variable vCant INTEGER;
  declare variable vPrec FLOAT;

Begin
   select idCliente from Clientes where idCliente = :pidCliente into vidCliente;
  if (vidCliente is null) then EXCEPION EX_ClienteNoExiste;
      for select idVenta where FechaVenta between :pInicio and :pTermino into :vidVenta do
          Begin
              for select idProducto, Cantidad,Precio from DetalleVenta where idVenta = :vidVenta
                  into :vidProd, :vCant, :vPrecio do
                       Begin
                           select descripcion from Inventario where idProducto :vidProd into psDescripcion
                       End
          End
End
(con los de insertar no tengo problema... bueno todavia no)

he visto algo sobre los CURSORES para MySQL pero aun no le capto....

la idea de procedimiento que tengo es esta, aunque todavia no le agarro el hilo:

Código: Seleccionar todo

DELIMITER $$
DROP PROCEDURE IF EXISTS pr_con_pagoaspirantes $$
create procedure pr_con_pagoaspirantes(OUT pnombre VARCHAR(50), OUT pappat VARCHAR(50),
                                       OUT papmat VARCHAR(50), OUT pagado VARCHAR(2))
BEGIN
 for select a.id, a.nombre, a.ap_paterno, a.ap_materno into pnombre, pappat, papmat from aspirantes a DO
	    BEGIN
        select id into pagado from pagos_aspirantes where idaspirante = a.id;
		    IF pagado IS NULL
           THEN SET pagado = "NO"
           ELSE SET pagado = "SI"
        END IF
	    END
END $$
DELIMITER ;
Agradeceria la orientacion que me puedan dar

Sales pues :D
Blaise Pascal: "Vale más saber alguna cosa de todo, que saberlo todo de una sola cosa."
Twitter: @nagual_oax
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: MySQL - Duda - Regresar valores con Proc. Almacenado

Mensaje por akodo » Lun Jul 06, 2009 11:17 pm

Como orientación, dos consultas interesantes:

Código: Seleccionar todo

select nombre from aspirantes where id in (select idaspirante from pago_aspirantes);
select nombre from aspirantes where id not in (select idaspirante from pago_aspirantes);
La primera te devuelve los nombres de los aspirantes cuyo id esté en el pago_aspirantes. La segunda es el caso contrario.

Creo que las consultas son autoexplicativas, así que no me voy a entretener más, pero pregunta si te quedan dudas.

Lo único que quedaría por hacer es que apareciese el campo "pagado" pero no se me ocurre cómo hacerlo.

Mi opinión personal es que no creo que sea necesario crear la tabla tal cual la pones. Si lo que interesa es saber quién a pagado y quién no, con que tengas un par de procedimientos (que tampoco es que haga falta que sean procedimientos) que te lo digan, supongo que es suficiente.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Avatar de Usuario
Nagual
Forista Distinguido
Forista Distinguido
Mensajes: 1001
Registrado: Vie Jul 01, 2005 7:00 am
Ubicación: Oaxaca, Mexico

Re: MySQL - Duda - Regresar valores con Proc. Almacenado

Mensaje por Nagual » Mar Jul 07, 2009 12:13 am

SI habia pensado en esas consultas, pero tendria o los que ya pagaron o los que no han pagado....

lo que busco es tener esas datos de un solo jalon, las tablas ya las tengo y estoy casi seguro que se puede hacer en un procedimiento, porque en InterBase hice algo similar, lo que no se (aun) es como realizarlo en MySQL.

inclusive intente hacer una vista, pero dado que el id que se compara en la segunda tabla puede ser nulo, no me genera un resultado, ya que debe existir ese dato... (salvo que yo haya cometido un error)

seguire indagando

Gracias akodo

Sales pues :D
Blaise Pascal: "Vale más saber alguna cosa de todo, que saberlo todo de una sola cosa."
Twitter: @nagual_oax
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: MySQL - Duda - Regresar valores con Proc. Almacenado

Mensaje por akodo » Mar Jul 07, 2009 12:50 am

Dejo un enlace interesante para el tratamiento de valores null
http://www.ccperalta.com/blog/2009/06/0 ... n-sql.html

Seguro que te resulta de utilidad
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje