MySQL Forums
Forum List  »  Spanish

Re: stored procedure vs parámetro de salida
Posted by: Miguel Perez
Date: March 05, 2008 02:35AM

Las funciones almacenadas toman parámetros de entrada únicamente y devuelven un único valor. No pueden devolver juegos de resultados; cualquier SELECT hecho dentro de una función almacenada debe tener INTO. No pueden ser recursivas :( , y no pueden iniciar o terminar una transacción, o ejecutar comandos de FLUSH o comandos que implícitamente inicien o terminen una transacción. Además existe el problema de replicarlas; para ser replicables deben ser puras (deterministas) o como mucho solamente leer SQL. Y tienen la ventaja fundamental de ser funciones y por tanto parte de expresiones, posiblemente en un SELECT. Las puedes invocar de 2 maneras:

1. Como parte de una expresión (por ejemplo, SELECT f(x)). Con SELECT obtendrás su resultado.
2. Con la instrucción DO, únicamente por sus efectos secundarios en el caso de no ser funciones replicables (por ejemplo, DO f(x)). En este caso no hay resultado.

Los procedimientos almacenados, por el contrario, tienen la enorme desventaja de que sólo pueden ser llamados con la instrucción CALL (p.e. CALL p(x)) y que no devuelven nada en forma expresiva, pero tienen las ventajas de soportar "parámetros de salida", y poder devolver uno o más juegos de resultados correspondientes a las SELECTs que hagas dentro de ellos. Además sí pueden ser recursivos (aunque no cuentes con recursividad profunda u optimización de llamada de cola).

Y tanto los procedimientos como las funciones deben ser escritos en SQL, no son elementos de primera clase (es decir, no puedes guardar un procedimiento o función en una variable o hacer un procedimiento o función de alto orden), no tienen variables libres (no hay cierres), y no puedes definir uno dentro de otro.

Un saludo,

Miguel Pérez
Afina Sistemas - Partner de MySQL en España

Options: ReplyQuote


Subject
Views
Written By
Posted
Re: stored procedure vs parámetro de salida
7323
March 05, 2008 02:35AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.