The world's most popular open source database
Algunas de las restricciones expuestas aquí se refieren a todas las rutinas almacenadas; esto es, procedimientos almacenados y funciones almacenadas. Algunas de las restricciones sólo se refieren a funciones almacenadas, y no a los procedimientos almacenados.
Todas las restricciones para las funciones almacenadas se refieren también a los disparadores(triggers).
Las rutinas almacenadas no pueden contener sentencias SQL arbitrarias. Las siguientes sentencias no están permitidas dentro de una rutina almacenada:
CHECK TABLES
LOCK TABLES, UNLOCK
TABLES
FLUSH
LOAD DATA, LOAD TABLE
Sentencias SQL preparadas(PREPARE,
EXECUTE, DEALLOCATE).
Implicación: No puedo usar SQL dinámico dentro de una rutina
almacenada(donde construya dinámicamente sentencias como cadenas
de caracteres y después ejecutarlas).
Además, en funciones almacenadas (pero no para procedimientos almacenados), no están permitidas las siguientes sentencias:
Sentencias que hacen commits o rollbacks explícitos o implícitos.
Sentencias que devuelvan un resultado. Esto incluye sentencias
SELECT que no tienen una cláusula
INTO y la sentencia SHOW.
Una función puede procesar un resultado tanto con
SELECT … INTO como con el uso
de un cursor y de la sentencia FETCH.
El uso de una rutina almacenada puede causar problemas de replicación. Este asunto se expone con profundidad en Sección 19.3, “Registro binario de procedimientos almacenados y disparadores”.
INFORMATION_SCHEMA todavía no tiene una tabla
PARAMETERS, así que aplicaciones que, en tiempo de
ejecución, necesiten adquirir información de los parámetros de
la rutina, deben usar técnicas como tratar la salida de
la sentencia SHOW CREATE.
No existen facilidades para el depurado de rutinas almacenadas.
Las rutinas almacenadas usan cursores materializados, no cursores nativos. (El resultado se genera y guarda en el lado del servidor, y después se devuelve línea por línea a medida que el cliente lo extrae.)
La sentencia CALL no se puede preparar.
Esto es cierto tanto para las sentencias preparadas del lado del servidor
como para las sentencias SQL preparadas.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

