1
resposta

Create Function - Erro 1418

Olá!

Estou com um problema na criação da function. O aparece o erro: ERROR 1418: 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)

Segue o codigo usado na criação:

CREATE FUNCTION `f_numero_aleatorio` (min INT, max INT)
RETURNS INTEGER
BEGIN
   DECLARE vRetorno INT;
   SELECT  FLOOR((RAND() * (max-min+1)) + min) INTO vRetorno;
RETURN vRetorno;
END
1 resposta

Oi, Sávio, como vai?

O erro que você está enfrentando se deve a uma configuração de segurança do MySQL. Quando o log binário está ativado, o MySQL requer que você declare explicitamente se uma função é determinística (DETERMINISTIC), ou se não faz nenhuma modificação SQL (NO SQL), ou se apenas lê dados SQL (READS SQL DATA).

No seu caso, a função f_numero_aleatorio apenas lê dados, então você pode adicionar READS SQL DATA à declaração da função. O código ficaria assim:

CREATE FUNCTION `f_numero_aleatorio` (min INT, max INT)
RETURNS INTEGER
READS SQL DATA
BEGIN
   DECLARE vRetorno INT;
   SELECT  FLOOR((RAND() * (max-min+1)) + min) INTO vRetorno;
RETURN vRetorno;
END

Porém, é importante notar que a palavra-chave DETERMINISTIC é usada quando uma função sempre retorna o mesmo resultado para os mesmos argumentos de entrada. No seu caso, a função não é determinística, pois a cada chamada, mesmo com os mesmos argumentos, o resultado será diferente, pois depende da função RAND(), que gera números aleatórios.

Espero ter ajudado. Caso tenha dúvidas, conte com o fórum. Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!