Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/07/2011, 20:24
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 (por desconocimiento)

El cambio de fin de sentencia del DELIMITER es para poder poner el SP en la base como una sola cosa, pero el $$ en este caso debe ir sólo después del END y en ninguna otra parte.
Interiormente, las sentencias siguen estando escritas con ";".
Por otro lado hay al menos tres de detalles:
1. La fecha como la estás formateando es el formato por default de salida, por lo que no se comprende para qué la formateas así. bastaría con usar DATE() sobre el resultado de la función para obtener el dato como fecha. Por el modo en que manipulas la información.
2. Si el campo es DATETIME, ¿qué sentido tiene usar entonces en esa tabla un campo TIME para la hora? ¿Por qué no pusiste todo el dato entero? Desperdicias espacio y capacidades de cálculo al hacerlo.
3. Estás haciendo una sintaxis innecesariamente complicada. Si usas una sola tabla, y en el FROM ya indicas la base y la tabla, no es necesario usar lo mismo al invocar el campo, ya que de todos modos será siempre sobre esa tabla. Se indican si hay un JOIN entre tablas, pero no si es una sola.

Mi propuesta:
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `sp_tpodisponible` $$
  4. CREATE PROCEDURE `sp_tpodisponible`(IN fini DATE, IN fter DATE)
  5.   SELECT TIMEDIFF(ftermina, finicia)
  6.   FROM
  7.     (SELECT MAX(ADDTIME(DATE(`fecha_ter`), `hora_ter`)) ftermina
  8.     FROM `tiempom`.`tb_ing_producto` tip
  9.     WHERE `fecha_ter` = fter) T1
  10.   JOIN
  11.     (SELECT MIN(ADDTIME(DATE(`fecha_ini`), `hora_ini`)) finicia
  12.     FROM `tiempom`.`tb_ing_producto` tip
  13.     WHERE `fecha_ini` = fini) T2
  14.   LIMIT 1;
  15. END $$
  16.  
  17. DELIMITER;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)