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

Procedimientos MYSQL rows a variables internas

Estas en el tema de Procedimientos MYSQL rows a variables internas en el foro de Mysql en Foros del Web. Hola, Estoy haciendo un procedimiento que suma puntajes, pero el problema que tengo es que al ejecutarlo, MYSQL query me dice que las subquerys devuelven ...
  #1 (permalink)  
Antiguo 28/09/2011, 16:07
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 13 años, 7 meses
Puntos: 10
Procedimientos MYSQL rows a variables internas

Hola,

Estoy haciendo un procedimiento que suma puntajes, pero el problema que tengo es que al ejecutarlo, MYSQL query me dice que las subquerys devuelven más de un valor, y yo lo único que quiero es trabajar con memoria interna de MYSQL. Estuve viendo varios ejemplos y todo pero no encuentro el error.

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `actualizar_puntajes` $$
  4. CREATE DEFINER=`root`@`localhost` PROCEDURE `actualizar_puntajes`(in id_ganador int, in id_perdedor int)
  5.  
  6.   declare pts_perdidos int;
  7.  
  8. declare pts_nivel int;
  9. declare id_padre int;
  10. declare per_derrota int;
  11. declare nivel int;
  12. declare pts_padre int;
  13. declare pts_actual int;
  14. declare a_pagar int;
  15. declare resto int;
  16.  
  17.  /*obtengo puntaje acutal*/
  18.   set @pts_actual = (select puntos from jugadores where idjugadores = 1);
  19.  
  20.   /*calculo el vuelto*/
  21.   set @resto = @pts_actual - @a_pagar;
  22.   /*le hago pagar*/
  23.   update jugadores set puntos = @resto where idjugadores =1;
  24.  
  25. /*subo en la cadena*/
  26.   /*el padre se transforma en perdedor*/
  27.   set @id_perdedor =  @id_padre;
  28.   /*el 15 del original*/
  29. set   @pts_perdidos = (@pts_perdidos  * @por_nota);
  30.  
  31.  
  32.   /*Calculo los puntos por nivel que perdio el tipo, los pts que pierde el perdedor dependen de los puntos del nivel
  33.   del ganador */
  34.   set @pts_perdidos = (select niveles.nivel from jugadores, niveles, relaciones where jugadores.id_nivel = relaciones.id_hijo and jugadores.idjugadores =1);
  35.  
  36.  
  37.   /*Veo si tiene padre*/
  38.   set @id_padre = (select id_padre from jugadores, relaciones where jugadores.idjugadores = relaciones.id_hijo and jugadores.idjugadores =1);
  39.  
  40.   /*Si tiene padre */
  41.   if @id_padre  != null then
  42.  
  43.   /*Obtengo porcentaje de puntos perdidos para su padre, de acuerdo al nivel del perdedor*/
  44.   set @per_derrota = (select porcentaje_socios from niveles, jugadores where jugadores.id_nivel = niveles.id_niveles and jugadores.idjugadores = 1);
  45.   /*   100          =  100             -   ( 100 * 0.15 = 15);*/
  46.   set @a_pagar =  @pts_perdidos  - (@pts_perdidos * @per_derrota);
  47.  
  48.   end if;
  49.  
  50.   until @id_perdedor = NULL
  51.  
  52.  
  53. END $$
  54.  
  55. DELIMITER ;

Alguien sabe como es el tema de recibir valores que devuelven los select a variables internas?, porque tengo entendido que con set @var = query se puede.

Gracias.
  #2 (permalink)  
Antiguo 29/09/2011, 08:23
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: Procedimientos MYSQL rows a variables internas

Cita:
Alguien sabe como es el tema de recibir valores que devuelven los select a variables internas?, porque tengo entendido que con set @var = query se puede.
Eso es válido sólo en los DBMS que tienen definidos tipos de dato ROW o TABLE. No es el caso de MySQL que no los tiene.
En sí, lo que quieres hacer se puede hacer, pero los algoritmos son diferentes.

No te olvides: MySQL no es SQL Server ni tampoco es Oracle. No existe un único lenguaje de procedures, porque no existe un estándar. Cada DBMS implementó lo que quiso.
__________________
¿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: internas, procedimientos, procedures, variables
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 00:06.