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

Procedimeinto Almacenado

Estas en el tema de Procedimeinto Almacenado en el foro de Mysql en Foros del Web. Hola buenas tardes. Tengo un problema con SP en mysql. Les explico: Este es mi codigo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original BEGIN     ...
  #1 (permalink)  
Antiguo 21/08/2014, 12:19
Avatar de zerokull  
Fecha de Ingreso: noviembre-2009
Mensajes: 153
Antigüedad: 14 años, 4 meses
Puntos: 1
Procedimeinto Almacenado

Hola buenas tardes.

Tengo un problema con SP en mysql. Les explico:
Este es mi codigo:
Código MySQL:
Ver original
  1.     DECLARE id_persona BIGINT(20);
  2.     DECLARE ids VARCHAR(50);
  3.     DECLARE fin INTEGER DEFAULT 0;
  4.     DECLARE cursor_parientes CURSOR FOR
  5.         SELECT A.N_ID_PARIENTE as ids_parientes
  6.         FROM tb_alumno AS A ,tb_datos_generales AS G
  7.         WHERE A.N_DATOS_PERSONALES = G.N_DATOS_PERSONALES
  8.         AND A.N_ASIGNADO = idGrupo
  9.         AND A.N_DATOS_PERSONALES = idAlumno;
  10.   DECLARE CONTINUE HANDLER FOR NOT FOUND SET fin=1;
  11.  
  12.     DROP TEMPORARY TABLE IF EXISTS tab_idsParientes;
  13.     CREATE TEMPORARY TABLE IF NOT EXISTS tab_idsParientes
  14.     (
  15.         id_parientes CHAR(50)  
  16.     );
  17.    
  18.     OPEN cursor_parientes;
  19.     cursor_parientesLoop: LOOP
  20.     FETCH cursor_parientes INTO id_persona;
  21.         IF fin THEN
  22.             LEAVE cursor_parientesLoop;
  23.         END IF;
  24.        
  25.         INSERT INTO tab_idsParientes(id_parientes)
  26.         SELECT A.N_ID_PARIENTE AS ids_parientes
  27.         FROM tb_alumno AS A , tb_datos_generales AS G
  28.         WHERE A.N_DATOS_PERSONALES = G.N_DATOS_PERSONALES
  29.         AND A.N_ASIGNADO = idGrupo
  30.         AND A.N_DATOS_PERSONALES = idAlumno;       
  31.         END LOOP cursor_parientesLoop;
  32.     CLOSE cursor_parientes;
  33.     SET ids = (SELECT id_parientes FROM tab_idsParientes); 
  34.    
  35.     select tb_parientes.N_DATOS_PERSONALES as id_pariente, tb_datos_generales.S_NOMBRE as nombre, tb_datos_generales.S_CORREO as correo
  36.     from tb_parientes,tb_datos_generales
  37.     where tb_datos_generales.N_DATOS_PERSONALES = tb_parientes.N_DATOS_PERSONALES
  38.     and tb_parientes.N_ID_PARIENTE in ( ids ); 

Lo que me devuelve el cursor es 1,2,5,6,7 y al consulta final me debería de devolver 5 filas y solo me devuelve la primera. me podrían ayudar. Nose que esta pasando.
Saludos
  #2 (permalink)  
Antiguo 21/08/2014, 12:52
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: Procedimeinto Almacenado

La verdad es que lo que planteaste,a menos que sea una exigencia de un trabajo práctico, es innecesario en su mayoría...
Lo que yo veo, analizando tu código, se puede resumir así:
Código MySQL:
Ver original
  1. CREATE PROCEDURE procedimiento(IN idAlumno INT; IN idGrupo INT)
  2.        P.N_DATOS_PERSONALES id_pariente,
  3.        DG.S_NOMBRE nombre,
  4.        DG.S_CORREO correo
  5.   FROM tb_parientes P
  6.        INNER JOIN tb_datos_generales DG ON P.N_DATOS_PERSONALES = DG.N_DATOS_PERSONALES
  7.  WHERE P.N_ID_PARIENTE IN (SELECT A.N_ID_PARIENTE ids_parientes
  8.                              FROM tb_alumno A
  9.                                   INNER JOIN tb_datos_generales G ON A.N_DATOS_PERSONALES = G.N_DATOS_PERSONALES
  10.                             WHERE A.N_ASIGNADO = idGrupo
  11.                               AND A.N_DATOS_PERSONALES = idAlumno);

Ahora bien, el tema es que si devuelve sólo un registro es porque tienes como parámetro mandatorio el idAlumno, que implica que sólo se consulta por un único alumno. Entonces habría que verificar si realmente ese alumno tiene cinco parientes registrados...
__________________
¿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 21/08/2014, 13:41
Avatar de zerokull  
Fecha de Ingreso: noviembre-2009
Mensajes: 153
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: Procedimeinto Almacenado

Lo hice de esa manera, puesto que en mi tabla de alumnos la relacion de parientes con alumnos esta de la siguiente maneja:

tb_alumnos

id alumno N_ID_PARIENTE
---------------|-----------------------
1 | 1,5,8,9,7,41
2 | 10,15,17
3 | 40


No se si tu consulta gnzsoloyo me podría servir?
  #4 (permalink)  
Antiguo 21/08/2014, 14:09
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: Procedimeinto Almacenado

Quiero imaginar que no tienes esa tabla con una columna donde almacenas N valores... Eso sería un espanto de diseño. Se trataría de un campo multivaluado, cosa absolutament prohibida en las bases de datos relacionales.
Si tienes eso, entonces estás en problemas, y de todos modos tampoco se usarían cursores para la query. Se hace de otra forma.
__________________
¿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 21/08/2014, 14:38
Avatar de zerokull  
Fecha de Ingreso: noviembre-2009
Mensajes: 153
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: Procedimeinto Almacenado

Gracias Por los puntos de vista gnzsoloyo.
  #6 (permalink)  
Antiguo 21/08/2014, 14:44
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: Procedimeinto Almacenado

No es exactamente un punto de vista. Es una regla fundamental del modelo relacional (Modelo E-R), y si pusieras un campo multivaluado en un examen de BBDD, el docente te reprueba sin terminar de revisar el resto. Con eso sólo alcanca par no pasarlo.

Así es de grave.
__________________
¿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: almacenado, select, sql
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 07:52.