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

Error al crear nueva funcion mysql

Estas en el tema de Error al crear nueva funcion mysql en el foro de Mysql en Foros del Web. Saludos a todos no se si alguien me pueda ayudar al insertar el siguiente codigo para crear una funcion en mysql me regresa un error ...
  #1 (permalink)  
Antiguo 14/06/2013, 13:06
 
Fecha de Ingreso: marzo-2013
Mensajes: 5
Antigüedad: 7 años, 10 meses
Puntos: 0
Error al crear nueva funcion mysql

Saludos a todos no se si alguien me pueda ayudar
al insertar el siguiente codigo para crear una funcion en mysql me regresa un error
el query lo saque de mysql 5.1.41-3ubuntu12.10 (Ubuntu)
de una funcion que quiero usar en otra base de datos (mysql 5.0.7-beta-nt)
en la de ubuntu si corre y crea la funcion pero en la otra no

Código MySQL:
Ver original
  1. delimiter $$
  2.  
  3. CREATE  FUNCTION `getTabuladorSueldo`(id int, fecha date) RETURNS double
  4.     declare sueldoTab double default 0;
  5.     declare done int default 0;
  6.     declare fechaInicial date;
  7.     declare fechaFinal date;
  8.     declare sueldo double;
  9.     declare sueldoTabulador cursor for select t.fechaInicial, t.fechaFinal, t.importe as sueldo from TabuladorSueldo t where t.idTabulador = id;
  10.     DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  11.    
  12.     open sueldoTabulador;
  13.     fetch sueldoTabulador into fechaInicial, fechaFinal, sueldo;
  14.     ciclo: while not done do
  15.         if fechaFinal is null then
  16.             set sueldoTab = sueldo;
  17.             LEAVE ciclo;
  18.         elseif fecha between fechaInicial and fechaFinal then
  19.             set sueldoTab = sueldo;
  20.             LEAVE ciclo;
  21.         end if;
  22.         fetch sueldoTabulador into fechaInicial, fechaFinal, sueldo;
  23.     end while;
  24.     close sueldoTabulador;
  25.     return sueldoTab;
  26. END$$


Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ciclo: while not done do if fechaFinal is null then set sueldoTab = sueldo;' at line 13
  #2 (permalink)  
Antiguo 15/06/2013, 14:58
 
Fecha de Ingreso: agosto-2003
Mensajes: 174
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: Error al crear nueva funcion mysql

Pues no lo veo. Supongo que debe haber algo en mysql 5.1 que no traga en 5.0 pero no sé que es. Prueba a hacer algunos cambios a ver si traga mejor. Por ejeplo puedes sustituir el if fecha is null por if isnull(fecha) y cosas así a ver si averiguas que es lo que pasa.

Yo al menos no caigo.
  #3 (permalink)  
Antiguo 15/06/2013, 15:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 13 años, 1 mes
Puntos: 2656
Respuesta: Error al crear nueva funcion mysql

La función almacenada que posteas es totalmente compatible con MySQL 5.0.x. La he probado y compila correctamente, por lo que el problema de sintaxis no se origina en el código en sí.
Existen dos problemas que podrían generarlo: por un lado, dependería de la forma en que lo cargas: Consola, phpMyadmin, MySQL Workbench, etc., porque algunos de ellos no reconocen el uso de los DELIMITER. Este no parece ser el caso.
Por otro lado, el uso de Linux como sistema operativo lleva a que no se reconozcan bien algunas palabras clave si están en minúsculas o algunas funciones en mayúsculas, por lo que eso genera errores de sintaxis o errores funcionales de difícil detección.
Tengo la impresión de que es más bien el segundo caso.
Hagamos un intento: Pon todas las palabras clave (comandos, funciones, sentencias, etc.) en mayúsculas y vuelve a probar.
Previamente, prueba de compilarlo en una máquina con Windows y no Linux. Si compila... entonces puede andar por allí la cosa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 16/06/2013, 02:33
 
Fecha de Ingreso: agosto-2003
Mensajes: 174
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: Error al crear nueva funcion mysql

Cuando tengo problemas en un bloque de código y no veo donde está lo que suelo hacer es lo siguiente

Si el bloque tiene diez lineas quito cinco y provoco el error. Si hay error es que está en las cinco que dejé. Si no lo hay es que está en las cinco que quité. Ahora vuelvo a poner las cinco (con lo que está en la situacion original) y de esas cinco quito tres y dejo dos. Provoco el error y si ocurre es que está en las dos lineas que dejé y si no es que está en las tres lineas que quité. Al poco habré averiguado que linea es. Por quitar puede entenderse comentar naturalmente. El caso es averiguar que linea es.

Una vez conozco la linea y si aún así no veo que pasa (tras revisar la linea y lo que ocurre antes) entonces, cambio la linea por otra linea equivalente. Por ejemplo si preguntas si a > 5 podrías preguntar si a>=6, cosas así. No tardas mucho en encontrar el error. En tu caso no lo veo pero en otro podría ser una variable mal declarada por ejemplo que al declarar se te coló una letra o como dice gnzsoloyo una cuestión de mayúsculas o delimitadores o alguna chorrada semejante

Etiquetas: Ninguno
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 11:36.