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!