Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/04/2013, 13:32
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: duda con case en funcion mysql

Hola jolie_girl:

Tu código no tienen ningún problema, es posible que hayas copiado mál el código, o que en alguno de los renglones tengas algún caracter especial que esté provocando el error... Este es tu código, eliminando sólo los espacios:

Código MySQL:
Ver original
  1. mysql> DELIMITER $$
  2. mysql> DROP FUNCTION IF EXISTS `prueba2`$$
  3. Query OK, 0 rows affected (0.04 sec)
  4.  
  5. mysql> CREATE DEFINER=`root`@`localhost` FUNCTION `prueba2`
  6.     -> (fecha DATE, actual DATE) RETURNS INT(2)
  7.     -> BEGIN
  8.     ->   DECLARE trimestreactual INT(1);
  9.     ->   DECLARE mesfecha INT(2);
  10.     ->   DECLARE messig INT(2);
  11.     ->   SET trimestreactual = QUARTER(actual);
  12.     ->   SET mesfecha = MONTH(fecha);
  13.     ->   CASE mesfecha
  14.     ->     WHEN 1 THEN
  15.     ->       CASE trimestreactual
  16.     ->         WHEN 1 THEN SET messig = 4;
  17.     ->         WHEN 2 THEN SET messig = 7;
  18.     ->         WHEN 3 THEN SET messig = 10;
  19.     ->         WHEN 4 THEN SET messig = 1;
  20.     ->       END CASE;
  21.     ->     WHEN 2 THEN
  22.     ->       CASE trimestreactual
  23.     ->         WHEN 1 THEN SET messig = 5;
  24.     ->         WHEN 2 THEN SET messig = 8;
  25.     ->         WHEN 3 THEN SET messig = 11;
  26.     ->         WHEN 4 THEN SET messig = 2;
  27.     ->       END CASE;
  28.     ->     WHEN 3 THEN
  29.     ->       CASE trimestreactual
  30.     ->         WHEN 1 THEN SET messig = 6;
  31.     ->         WHEN 2 THEN SET messig = 9;
  32.     ->         WHEN 3 THEN SET messig = 12;
  33.     ->         WHEN 4 THEN SET messig = 3;
  34.     ->       END CASE;
  35.     ->     WHEN 4 THEN
  36.     ->       CASE trimestreactual
  37.     ->         WHEN 1 THEN SET messig = 1;
  38.     ->         WHEN 2 THEN SET messig = 4;
  39.     ->         WHEN 3 THEN SET messig = 7;
  40.     ->         WHEN 4 THEN SET messig = 10;
  41.     ->       END CASE;
  42.     ->     END CASE;
  43.     ->   RETURN messig;
  44.     -> END$$
  45. Query OK, 0 rows affected (0.00 sec)
  46.  
  47. mysql> DELIMITER ;
  48. mysql> SELECT `prueba2`(curdate(), curdate());
  49. +---------------------------------+
  50. | `prueba2`(curdate(), curdate()) |
  51. +---------------------------------+
  52. |                               4 |
  53. +---------------------------------+
  54. 1 row in set (0.00 sec)

Revisa eso de los espacios al final, es muy común que se copie basura cuando haces COPY-PASTE

saludos
Leo.