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

[SOLUCIONADO] Usar variables de usuario en procedimientos

Estas en el tema de Usar variables de usuario en procedimientos en el foro de Mysql en Foros del Web. Buenas, tengo dos procedimientos, el primero consulta una fecha y una hora y devuelve en una variable el dia que es (sabado mañana, sabado tarde, ...
  #1 (permalink)  
Antiguo 16/04/2014, 10:55
Avatar de temerariomalaga  
Fecha de Ingreso: marzo-2013
Ubicación: Londres
Mensajes: 156
Antigüedad: 11 años, 1 mes
Puntos: 9
Usar variables de usuario en procedimientos

Buenas, tengo dos procedimientos, el primero consulta una fecha y una hora y devuelve en una variable el dia que es (sabado mañana, sabado tarde, etc).
Ese procedimiento llama a otro procedimiento pasandole el dia para a continuación comprobar en una tabla si determinado dia está marcado a si.
El problema está en que si recibo la variable como de usuario (@dia) entonces me da fallo (error sintáctico) pero si recibo como (dia CHAR) después la consulta no me devuelve resultados.
Dejo aquí el código:
Código MySQL:
Ver original
  1. CREATE PROCEDURE getDia(IN codigo INTEGER, IN pabellon INTEGER)
  2.     SELECT DATE_FORMAT(Fecha, '%w') INTO @fecha FROM PARTIDO WHERE Codigo_partido=(SELECT codigo);
  3.     SELECT Hora INTO @hora FROM PARTIDO WHERE Codigo_partido=(SELECT codigo);
  4.     IF @fecha=0 AND @hora<'15:00' THEN
  5.         SET @dia='DM';
  6.     END IF;
  7.     IF @fecha=0 AND @hora>'15:00' THEN
  8.         SET @dia='DT';
  9.     END IF;
  10.     IF @fecha=1 THEN
  11.         SET @dia='L';
  12.     END IF;
  13.     IF @fecha=2 THEN
  14.         SET @dia='M';
  15.     END IF;
  16.     IF @fecha=3 THEN
  17.         SET @dia='X';
  18.     END IF;
  19.     IF @fecha=4 THEN
  20.         SET @dia='J';
  21.     END IF;
  22.     IF @fecha=5 THEN
  23.         SET @dia='V';
  24.     END IF;
  25.     IF @fecha=6 AND @hora<'15:00' THEN
  26.         SET @dia='SM';
  27.     END IF;
  28.     IF @fecha=6 AND @hora>'15:00' THEN
  29.         SET @dia='ST';
  30.     END IF;
  31.     CALL getDisponibles(@dia);
  32. END;$$
  33.  
  34. DROP PROCEDURE IF EXISTS getDisponibles$$
  35. CREATE PROCEDURE getDisponibles(IN @dia CHAR)
  36.     SELECT EQUIPO_ARBITRAL.Codigo_arbitro FROM EQUIPO_ARBITRAL INNER JOIN OFICIAL
  37.     ON EQUIPO_ARBITRAL.Codigo_arbitro=OFICIAL.Codigo_arbitro INNER JOIN DISPONIBILIDAD
  38.     ON OFICIAL.Codigo_arbitro=DISPONIBILIDAD.Codigo_arbitro WHERE @dia='Si';
  39. END;$$
__________________
Málaga Club de Fútbol: Memoria, Compromiso, Fe
  #2 (permalink)  
Antiguo 16/04/2014, 11:04
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, 5 meses
Puntos: 2658
Respuesta: Usar variables de usuario en procedimientos

Las variables de usuario , aunque se pasen como parámetro, no se usan en el nombre de parámtros del prototipo.
Por otro lado, para el caso tuyo ni siquiera son necesarias si sólo van a ser usadas en forma local.
Tengo la impresión de que estás haceindo un código demasiado complicado e ineficiente para lo que necesitas. Yo lo haría de otro modo.
__________________
¿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 17/04/2014, 01:24
Avatar de temerariomalaga  
Fecha de Ingreso: marzo-2013
Ubicación: Londres
Mensajes: 156
Antigüedad: 11 años, 1 mes
Puntos: 9
Respuesta: Usar variables de usuario en procedimientos

No se me ocurre otra forma de hacerlo, lo he intentado con php pero he llegado a un callejón sin salida y se me ha ocurrido hacerlo con procedimientos y posteriormente insertar todos los procedimientos en una sola query de php.
Voy a intenar plantear de otra forma la consulta de los dias.
__________________
Málaga Club de Fútbol: Memoria, Compromiso, Fe
  #4 (permalink)  
Antiguo 17/04/2014, 06:38
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, 5 meses
Puntos: 2658
Respuesta: Usar variables de usuario en procedimientos

Bueno, sin saber cómo es realmente la estructura de las tablas de los árbitros, voy a suponer que el campo "dia" existe en la tabla "disponibilidad", y que corresponde al día disponible de ese árbitro.
Mi primer acercamiento sería este:
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3.  
  4. CREATE PROCEDURE getDia(IN codigo INTEGER, IN pabellon INTEGER)
  5.     DECLARE fecha INT;
  6.     DECLARE hora TIME;
  7.     DECLARE dia VARCHAR(2);
  8.  
  9.     SELECT DAYOFWEEK(Fecha), TIME(hora)  FROM PARTIDO WHERE Codigo_partido=codigo
  10.     INTO FECHA, HORA;
  11.     CASE fecha
  12.     WHEN 0 THEN
  13.         IF hora < TIME('15:00:00') THEN
  14.             SET dia = 'DM';
  15.         ELSE
  16.             SET dia = 'DT';
  17.         END IF;
  18.     WHEN 1 THEN
  19.         SET dia = 'L';
  20.     WHEN 2 THEN
  21.         SET dia = 'M';
  22.     WHEN 3 THEN
  23.         SET dia = 'X';
  24.     WHEN 4 THEN
  25.         SET dia = 'J';
  26.     WHEN 5 THEN
  27.         SET dia = 'V';
  28.     WHEN 6 THEN
  29.         IF hora < TIME('15:00:00') THEN
  30.             SET dia = 'SM';
  31.         ELSE
  32.             SET dia = 'ST';
  33.         END IF;
  34.  
  35.     END CASE;
  36.     SELECT DISTINCT ea.Codigo_arbitro
  37.     FROM EQUIPO_ARBITRAL ea
  38.         INNER JOIN OFICIAL of ON ea.Codigo_arbitro=o.Codigo_arbitro
  39.         INNER JOIN DISPONIBILIDAD d ON o.Codigo_arbitro=d.Codigo_arbitro
  40.     WHERE d.dia=dia;
  41. END$$
  42.  
  43. delimiter ;
Así escrito, devolvería una tabla de códigos de árbitros disponibles para un partido determinado.
Lo que no queda claro es para qué mandas el parámetro "pabellon", porque no tiene uso dentro ni siquiera dentro de tu SP.
__________________
¿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 18/04/2014, 03:26
Avatar de temerariomalaga  
Fecha de Ingreso: marzo-2013
Ubicación: Londres
Mensajes: 156
Antigüedad: 11 años, 1 mes
Puntos: 9
Respuesta: Usar variables de usuario en procedimientos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Lo que no queda claro es para qué mandas el parámetro "pabellon", porque no tiene uso dentro ni siquiera dentro de tu SP.
Lo del pabellon es para el último SP al que llamo que comprueba la localidad usando el pabellon. Pues con los if ya lo he solucionado. Gracias
__________________
Málaga Club de Fútbol: Memoria, Compromiso, Fe

Etiquetas: procedimientos
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 14:32.