Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Portada » Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 4 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Vie Jul 01, 2005 7:00 am
Mensajes: 1001
Ubicación: Oaxaca, Mexico

Nota Publicado: Lun Jul 06, 2009 9:12 pm 
Arriba  
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:
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:
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

 Perfil  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 8:00 am
Mensajes: 1457
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Lun Jul 06, 2009 11:17 pm 
Arriba  
Como orientación, dos consultas interesantes:
Código:
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" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)

 Perfil  

Desconectado
Forista Distinguido
Forista Distinguido
Avatar de Usuario

Registrado: Vie Jul 01, 2005 7:00 am
Mensajes: 1001
Ubicación: Oaxaca, Mexico

Nota Publicado: Mar Jul 07, 2009 12:13 am 
Arriba  
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

 Perfil  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 8:00 am
Mensajes: 1457
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Mar Jul 07, 2009 12:50 am 
Arriba  
Dejo un enlace interesante para el tratamiento de valores null
http://www.ccperalta.com/blog/2009/06/02/transformacion-de-valores-nulos-en-valores-reales-en-sql.html

Seguro que te resulta de utilidad

_________________
Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)

 Perfil  
Mostrar mensajes previos:  Ordenar por  
 [ 4 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


 Temas relacionados   Autor   Respuestas   Vistas   Último mensaje 
Duda, filesystem proc y archivos virtuales.

en Software

Emi77

1

380

Lun Sep 17, 2012 3:40 pm

o4kley Ver último mensaje

Valores por defecto para conectar a MySQL usando PHP [Solucionado]

en Programación

Juanp_1982

11

1792

Dom Ago 12, 2012 6:33 pm

mcun Ver último mensaje

Duda - Apache/Moodle - Multiples copias del proc. Apache y consumo de RAM

en Redes y Servidores

Nagual

4

994

Mié Abr 07, 2010 11:47 pm

Kde_Tony Ver último mensaje

MySQL - Duda - Obtener ultimo ID en un procedimiento

en Redes y Servidores

Nagual

1

515

Sab Dic 05, 2009 3:35 am

Nagual Ver último mensaje

Duda sobre interaccion y manejo de usuarios en java y mysql

en Programación

elhui2

1

716

Sab Ene 30, 2010 2:24 am

akodo Ver último mensaje



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC + 1 hora [ DST ]
Traducción al español por Huan Manwë
phpBB SEO