Ver Mensaje Individual
  #5 (permalink)  
Antiguo 21/12/2012, 09:11
kies89
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Busqueda Respuesta: Error en función

Listo, este es el código:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE FUNCTION web.animales(animal VARCHAR(15)) RETURNS TINYINT(1)
  3.   IF (SELECT COUNT(nombre) FROM animales WHERE nombre=animal) > 0  THEN -- Si el animal ya existe en la tabla,
  4.     IF (SELECT sexo FROM animales WHERE nombre=animal) = "macho" THEN -- Comprobar si es macho o hembra
  5.       RETURN 1; -- Si es macho, devolver 1
  6.     ELSE
  7.       RETURN 0; -- Si es hembra, devolver 0
  8.     END IF;
  9.   ELSE -- Si el animal no existe en la tabla,
  10.     INSERT INTO animales(nombre, sexo) VALUES(animal, "macho"); -- Por defecto será siempre macho
  11.     RETURN 2; -- Devolvemos 2
  12.   END IF;
  13. END $$
Mensaje de error:
Cita:
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
Google:
Debes especificar qué hará la función, si DETERMINISTIC, si va a modificar datos de tablas...
También me dice: ejecuta SET GLOBAL log_bin_trust_function_creators = 1;

Entonces, si en la función pueden haber distintos casos (como ocurre en esta función), que o hacemos SELECT o hacemos un INSERT, y no sabemos previamente si modificaremos o solamente haremos SELECT, ¿qué hago?

Última edición por gnzsoloyo; 21/12/2012 a las 11:14 Razón: Mal etiquetado...