Solo escuchar la pregunta me hace pensar en dos aspectos:
ASPECTO # 1: Se supone que las funciones son DETERMINISTAS
Si esto es así, esto implica que una función debe presentar los mismos datos de retorno consistentemente para un conjunto dado de parámetros, NO IMPORTA CUANDO LLAME A LA FUNCIÓN.
Ahora, imagine una función que produce una respuesta diferente debido a la recopilación de datos en diferentes momentos del día en función de SQL estático en la función. En cierto sentido, eso todavía puede considerarse DETERMINISTA si consulta el mismo conjunto de tablas y columnas cada vez, dado el mismo conjunto de parámetros.
¿Qué pasaría si pudiera cambiar las tablas subyacentes de una función a través de Dynamic SQL? Está violando la definición de una función DETERMINISTICA.
Tenga en cuenta que MySQL agregó esta opción en /etc/my.cnf
log-bin-trust-function-creators
Aunque esto puede ser una simplificación excesiva, esto permite que las funciones puedan escribir datos en registros binarios sin aplicar estrictamente la propiedad DETERMINISTIC.
ASPECTO # 2: Los disparadores deberían poder revertirse
- ¿Te imaginas un disparador con los mismos comportamientos que una función y luego introducir SQL dinámico en la mezcla?
- ¿Te imaginas tratar de aplicar MVCC (Control de concurrencia multiversional) contra SQL dinámico después de aplicar MVCC a la tabla base para la que estaba destinado el disparador?
Esencialmente, tendría datos que crecen cuadráticamente (incluso exponencialmente) solo en MVCC. El proceso de gestionar la reversión de SQL con desencadenadores que pueden ser no DETERMINISTOSOS sería, por decir lo menos, complejo de impío.
A la luz de estos dos aspectos, estoy seguro de que los desarrolladores de MySQL pensaron en estas cosas y rápidamente las descartaron imponiendo restricciones.
Entonces, ¿por qué levantar la restricción de procedimientos? En pocas palabras, no hay preocupación por las propiedades DETERMINISTAS o la reversión.