Apenas ouvir a pergunta me faz pensar em dois aspectos:
ASPECTO Nº 1: As funções devem ser DETERMINÍSTICAS
Nesse caso, isso implica que uma função deve apresentar os mesmos dados de retorno de forma consistente para um determinado conjunto de parâmetros, NÃO IMPORTA QUANDO CHAMAR A FUNÇÃO.
Agora, imagine uma função que produza uma resposta diferente devido à coleta de dados em diferentes horários do dia com base no SQL estático na função. De certa forma, isso ainda pode ser considerado DETERMINÍSTICO se você consultar o mesmo conjunto de tabelas e colunas todas as vezes, considerando o mesmo conjunto de parâmetros.
E se você pudesse alterar as tabelas subjacentes de uma função via Dynamic SQL? Você está violando a definição de uma função DETERMINÍSTICA.
Observe que o MySQL adicionou esta opção no /etc/my.cnf
log-bin-trust-function-creators
Embora possa ser uma simplificação excessiva, isso permite que funções permitam gravar dados em logs binários sem impor rigorosamente a propriedade DETERMINISTIC.
ASPECTO Nº 2: Os gatilhos devem poder ser revertidos
- Você poderia imaginar um gatilho com os mesmos comportamentos de uma função e, em seguida, introduzir o Dynamic SQL no mix?
- Você poderia imaginar tentando aplicar o MVCC (Multiversion Concurrecy Control) ao Dynamic SQL após aplicar o MVCC à tabela base para a qual o acionador foi criado?
Você teria essencialmente dados que crescem quadraticamente (mesmo exponencialmente) apenas no MVCC. O processo de gerenciar a reversão do SQL com gatilhos que podem não ser DETERMINÍSTICOS seria incrivelmente complexo, para dizer o mínimo.
À luz desses dois aspectos, tenho certeza que os desenvolvedores do MySQL pensaram nessas coisas e as descartaram rapidamente, impondo restrições.
Então, por que suspender a restrição de procedimentos? Simplificando, não há preocupação com as propriedades DETERMINÍSTICAS ou a reversão.