Ver Mensaje Individual
  #7 (permalink)  
Antiguo 25/12/2012, 08:04
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 3 meses
Puntos: 2658
Respuesta: Error en procedimiento almacenado

A mi entender estás complicando innecesariamente el código, recargándolo de operaciones que se pueden obviar con funciones. Especialmente si la hora en el parámetro "tempo" es un TIME con formato "HH:MM:SS", tal como se infiere de lo que haces en el script.
Incluso, si lees el manual, verás que hay funciones específicas para extraer Año, Mes, Día, Horas, Minutos o segundos de una fecha, fecha y hora o de una hora expresada como tiempo. No necesitas hacer cosas complicadas.
Las funciones de MySQL para fechas y horas son muchas y si las aprovechas tendrás mejores resultados.
Creo que para simplificar la cosa andaría por acá:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE PROCEDURE inserciones (
  3.     recorrido VARCHAR(30) CHARSET utf8,
  4.     tempo VARCHAR(8) CHARSET utf8,
  5.     espacio DECIMAL(5,2) UNSIGNED)
  6.     DECLARE resultado DECIMAL(5,2) DEFAULT 0;
  7.     DECLARE tiempo_en_minutos DECIMAL(7,3)DEFAULT 0;
  8.     DECLARE calorias DECIMAL(6,2) DEFAULT 0;
  9.    
  10.     SET space = espacio*1000;
  11.    
  12.     SET resultado = (space/(TIME_TO_SEC(tempo)))*3.6;
  13.     SET tiempo_en_minutos = TIME_TO_SEC(tempo)/60;
  14.    
  15.     SELECT (coeficiente * 85 * 2.2 * tiempo_en_minutos) -- La multiplicacion es una operacion distributiva, en este caso los parentesis son superfluos
  16.     FROM coeficientes
  17.     WHERE resultado BETWEEN desde AND hasta
  18.     INTO calorias;
  19.    
  20.     INSERT INTO datos(recorrido, tiempo, distancia, calorias, kmh)
  21.     VALUES(recorrido, tempo, espacio, calorias, resultado);
Un tip, respecto a DELIMITER: No es buena práctica usar para el cambio de delimitador caracteres que estén relacionados con operaciones de algún tipo. COmo por ejemplo las barras, porque pueden generar conflictos en algún momento.
Si te fijas con cuidado, todos los editores ( y los ejemplos del manual) usan el "$$". Por algo es.
Usa ese, no las dobles barras.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)