Tabla de contenidos
La discución aqui describe restricciones que aplican a el uso de las caracteristicas de MySQL como son las subconsultas ovistas.
Algunas de las restricciones notadas aqui aplican para todas las rutinas almacenadas; esto es, procedimientos almacenados y funciones almacenadas. Algunas de las restricciones solo aplican a funciones almacenadas, y no a los procedimientos almacenados.
Todas las restricciones para las funciones almacenadas aplican también a los disparadores(triggers).
Las rutinas almacenadas no pueden contener sentencias SQL arbitarias. Las siguientes sentencias no son 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 y después ejecutarlas).
Para funciones almacenadas (pero no para procedimientos almacenados), las siguientes sentencias son adicionalmente no permitidas:
-
Sentencias que hacen commit o un rollback explicito o implicito.
-
Sentencias que regresen un resultado. Esto incluye sentencias
SELECTque no tienen una clausulaINTOclause y la sentenciaSHOW. Una funcion puede procesar un resultado tanto como para unSELECT … INTOo como para el uso de cursor y la sentenciaFETCH.
El uso de una rutina almacenada puede causar problemas de replicación. Este tema es discutido más adelante en Sección 19.3, “Registro binario de procedimientos almacenados y disparadores”.
INFORMATION_SCHEMA todavia no tiene una tabla
PARAMETERS, asi que aplicaciones que necesiten
adquirir información de los parámetros de la rutina deben usar
técnicas como tratar la salida de la sentenciaSHOW
CREATE.
No existen facilidades de depurado para rutinas almacenadas.
Rutinas almacenadas usan cursores materializados, no cursores nativos. (El resultado es generado y guardado de lado del servidor, y después regresado renglón por renglón como lo solicite el cliente.)
La stentencia CALL no puede ser preparada.
Esto aplica para las sentencias preparadas de lado del servidor
y para las sentencias SQL preparadas.