Conoce SQL – Lenguaje procedimental 2 – Funciones

El concepto de función de el lenguaje procedimental de  mysql es el mismo que en cualquier otro lenguaje, se le dan unos datos y devuelve otros.

En este lenguaje existen varibles IN, variables OUT y variables INOUT. Las variables IN son aquellas que se pasan como parametros y no se pueden editar y las OUT pues que sí se pueden editar. En el caso de las funciones, los parámetros son de tipo IN de manera predeterminada. Recomiendo encarecidamente no usar variables OUT o INOUT, en mi opinión está “feo” editar las variables que te pasan a la función.

Lo que devuelve una función tiene que ser compatible con SQL. Me refiero a que por ejemplo no puedes devolver un valor booleano porque en SQL no existe ese tipo de datos.

Nuestras funciones las podemos usar de la misma manera que las funciones de mysql, veamos algún ejemplo.

La sintaxis es la siguiente

CREATE FUNCTION funcion (var1 INT, var2 VARCHAR(20))
RETURNS INT
BEGIN
–HACER algo
return var1;
END

Las dos primeras líneas son el prototipo de la función, los parámetros que se le pasan y el tipo de dato que devuelve (en ese caso int pero puede ser varchar, char…). Dentro se pueden meter cursores, bucles y todo lo que quieras.

Para ejecutar nuestra función simplemente hacer:

SELECT funcion(5,’hola’)

Eso daría como resultado 5, ya que devuelve la variable que le pasamos (sí, una función totalmente estúpida). Ahora suponemos que tenemos esta función:

CREATE FUNCTION doblar (var1 INT)
RETURNS INT
BEGIN
SET var1=var1*2;
return var1;
END

Podemos hacer esta consulta:

SELECT doblar(precio), precio FROM articulos;

Suponiendo que tenemos una tabla articulos con una columna llamada precio, esto nos mostraría el precio multiplicado por 2 y el precio normal.

Esto de las funciones esta bien pero para mysql no tienen mucho uso ya que NO se pueden devolver conjuntos de datos. Esto quiere decir que no podemos devolver el resultado de una consulta filtrada por ejemplo, algo que sería bastante interesante.

Termino diciendo que yo no uso nunca funciones. Simplemente porque no las encuentro utlilidad pero cada uno es cada uno, igual a ti te gustan.

You may also like...

1 Response

  1. Juanjo dice:

    Hola amigo tengo una duda estoy utilizando funciones en un proyecto de la universidad pero me da el siguiente error #1422 – Explicit or implicit commit is not allowed in stored function or trigger.
    Segun entiendo en mysql al utilizar funciones no puedo utilizar transacciones (commit, rollback) me podrias orientar con este tema.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *