Capaz de criar procedimentos mas não de funções [closed]

1

Eu sou capaz de criar procedimentos armazenados no mysql, mas não de funções armazenadas.

exemplo:

DELIMITER $$;
DROP FUNCTION IF EXISTS 'interkm_db1'.'temp'$$
CREATE FUNCTION 'interkm_db1'.'temp' ()
    RETURNS int
BEGIN
    return 1;
END$$
DELIMITER ;$$

Código de erro: 1418 Esta função não possui DETERMINISTIC, NO SQL ou READS SQL DATA em sua declaração e o log binário está habilitado (você pode querer usar a variável log_bin_trust_function_creators menos segura)

Ainda reclama que não tem privilégio SUPER quando uso a declaração DETERMINISTIC.

Esta é uma instalação do MySQL hospedada pelo ISP.

SHOW VARIABLES LIKE "%version%";
protocol_version    10
version 5.1.61-0+squeeze1-log
version_comment (Debian)
version_compile_machine i486
version_compile_os  debian-linux-gnu

MAIS DETALHES Eu só tenho todos os privilégios para o meu banco de dados em

CONCEDA TODOS OS PRIVILÉGIOS EM interkm_db1 . * TO 'interkm_1' @ '%' CONCESSÃO DE UTILIZAÇÃO EM . PARA 'interkm_1' @ '%' IDENTIFICADO POR SENHA '-------' Conceder todos os privilégios em interkm_db1 . * TO 'interkm_1' @ '%'

    
por Sydwell 30.05.2012 / 17:00

2 respostas

3

Fonte de referência: link

To create or alter a stored function, you must have the SUPER privilege, in addition to the CREATE ROUTINE or ALTER ROUTINE privilege that is normally required. (Depending on the DEFINER value in the function definition, SUPER might be required regardless of whether binary logging is enabled. See Section 13.1.9, “CREATE PROCEDURE and CREATE FUNCTION Syntax”.)

Como esta é uma instalação compartilhada (hospedada em ISP), é improvável que você obtenha super privilégios. Isso permite um alto grau de controle total do sistema.

Além disso, você também deve incluir uma das três coisas mencionadas para que o sistema de binlogging / replicação saiba como lidar com sua função se você tivesse os privilégios para usá-la.

    
por 30.05.2012 / 17:10
0

Resolvido recriando o banco de dados!

Eu acho que é provavelmente uma solução padrão, mas eu quase entre em pânico quando isso acontece comigo.

Então, para aqueles que encontram um problema semelhante.

Tente recriar seu banco de dados.

Quanto ao motivo pelo qual ele quebrou em primeiro lugar, eu ainda não tenho uma pista

    
por 30.05.2012 / 20:28