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

Select dependientes en Procedure + CURSOR

Estas en el tema de Select dependientes en Procedure + CURSOR en el foro de Mysql en Foros del Web. Hola Muchach@s, Soy nuevo con los Procedures y tengo la siguiente duda Ejemplo del cuerpo de mi SP: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original BEGIN ...
  #1 (permalink)  
Antiguo 27/07/2017, 13:02
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Select dependientes en Procedure + CURSOR

Hola Muchach@s,

Soy nuevo con los Procedures y tengo la siguiente duda

Ejemplo del cuerpo de mi SP:

Código SQL:
Ver original
  1. BEGIN
  2. DECLARE id_xxx INT;
  3.  
  4. SELECT id
  5.        INTO id_xxx
  6. FROM TABLE;
  7.  
  8. DECLARE cursor1 CURSOR FOR
  9. SELECT name
  10. FROM table2
  11. WHERE id =id_xxx;

Tengo una consulta inicial donde busco un id en una tabla, luego ese id lo utilizo en un segundo select...

Necesito iterar ese segundo select por lo que investigando me encontré con los CURSOR y para eso debo usar DECLARE. pero cuando hago eso me genera un error al guardar el Procedure porque no puedo usar DECLARE nuevamente.

Cuál es la manera más optima de trabajar estos casos?

En dado caso si necesito utilizar los los datos del segundo select en un tercer o cuarto select etc?

Me pueden dar una pista? gracias
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #2 (permalink)  
Antiguo 27/07/2017, 14:04
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Select dependientes en Procedure + CURSOR

La mas optima haciendo un join, para que el cursor??

Código MySQL:
Ver original
  1. select * from table2 as t1
  2. left join table1 as t2 on (t1.id=t2.id)

Y ahi sacas todos los registros que estan en tabla 1 y tabla2
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 27/07/2017, 14:43
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Respuesta: Select dependientes en Procedure + CURSOR

Hola gracias por responder.

Esa opción ya la realicé, pero me funciona hasta un punto de mi procedure.

el caso es que tengo varias consultas y necesito primero calcular varios datos y luego usarlos en las sql, la verdad tengo 6 query y en cada uno necesito unos datos que deben ser calculados antes.

Esto no es posible?
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #4 (permalink)  
Antiguo 27/07/2017, 15:00
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Select dependientes en Procedure + CURSOR

Para eso tienes las variables, digamos tienes un valor en este query:

Código MySQL:
Ver original
  1. declare @variable int
  2. select @variable=id from tabla1

y luego lo usas en otro lado

Código MySQL:
Ver original
  1. select * from tabla2 where dato=@variable

No ocupas hacer iteraciones renglon por renglon para hacer eso
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 27/07/2017, 15:19
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Respuesta: Select dependientes en Procedure + CURSOR

Ok,

Tomando tu ejemplo, digamos que el siguiente query devuelve 20 filas

Código SQL:
Ver original
  1. SELECT * FROM tabla2 WHERE dato=@variable

y cada uno de esas 20 necesitara calcularles el salario y unos tax dependiendo de otras condiciones y a su vez necesitara hacer otras consultas y volver a leer otras 30 filas de otras consulta y así sucesivamente.

Ojalá la tuviera fácil así como dices tú
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #6 (permalink)  
Antiguo 27/07/2017, 15:35
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Respuesta: Select dependientes en Procedure + CURSOR

Por ejemplo

Código SQL:
Ver original
  1. CREATE PROCEDURE curdemo()
  2. BEGIN
  3.   DECLARE done INT DEFAULT FALSE;
  4.   DECLARE cur1 CURSOR FOR SELECT id,DATA FROM test.t1;
  5.   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  6.  
  7.   OPEN cur1;
  8.  
  9.   read_loop: LOOP
  10.     FETCH cur1 INTO a, b;
  11.     IF done THEN
  12.       LEAVE read_loop;
  13.     END IF;
  14.     IF b < c THEN
  15.       # AQUI HABRÏA UN PROBLEMA (POR EL DECLARE)
  16.       DECLARE cur1 CURSOR FOR SELECT id,DATA FROM test.t1;
  17.       .
  18.       .
  19.       .
  20.     ELSE
  21.       # AQUI TAMBIEN HABRÏA UN PROBLEMA (POR EL DECLARE)
  22.       DECLARE cur1 CURSOR FOR CALL otra_funcion(param_de_primer_sql, param_de_primer_sql);
  23.       .
  24.       .
  25.       .
  26.     END IF;
  27.   END LOOP;
  28.  
  29.   CLOSE cur1;
  30.   CLOSE cur2;
  31. END;


Espero haber sido más claro, gracias.
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #7 (permalink)  
Antiguo 28/07/2017, 08:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Select dependientes en Procedure + CURSOR

Cita:
Iniciado por malakian Ver Mensaje
Ok,

Tomando tu ejemplo, digamos que el siguiente query devuelve 20 filas

Código SQL:
Ver original
  1. SELECT * FROM tabla2 WHERE dato=@variable

y cada uno de esas 20 necesitara calcularles el salario y unos tax dependiendo de otras condiciones y a su vez necesitara hacer otras consultas y volver a leer otras 30 filas de otras consulta y así sucesivamente.

Ojalá la tuviera fácil así como dices tú
A lo que veo no ocupas un cursor, es solo que estas viendo la programacion en bases de datos como programacion normal, y no es asi, no veo el punto en donde digas que ocupas hacer iteraciones con los datos. pero bueno quieres usar cursores, el problema que tienes es que tienes 2 declare, y nada mas necesitas declarar una vez, quita el declare del principio y prueba
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: cursor, procedure
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 12:53.