Cómo crear funciones en MySQL

Como hemos comentado en el post de procedimientos almacenados, tener nuestras funciones y procedimientos en MySQL en lugar de de procesar los datos con algún lenguaje del lado del servidor, como PHP , tiene la ventaja de que viaja menos información de la base de datos al servidor web , con el consiguiente aumento del rendimiento y que estas funciones harán que podamos atacar la base de datos desde cualquier otro lenguaje, como Java o ASP.NET sin tener que volver a procesar los datos otra vez.

MySQL tiene muchas funciones que podemos usar en nuestro procedimientos almacenados y consultas, pero en ocasiones podemos necesitar crear nuestras propias funciones para hacer cosas más especializadas…

Vamos a ver cómo crear funciones en MySQL:

DELIMITER //

CREATE FUCNTION holaMundo() RETURNS VARCHAR(20)
BEGIN
    RETURN ‘HolaMundo’;
END
//

Para comprobar que funciona tecleamos lo siguiente en la consola de MySQL :

Select holaMundo();

Lo que devuelve el siguiente resultado :

mysql> select holaMundo()//

+--------------+
| holaMundo()  |
+--------------+
| Hola Mundo!! |
+--------------+
1 row in set (0.00 sec)

Para borrar la función que acabamos de crear :

DROP FUNCTION IF EXISTS holaMundo

Uso de las variables en funciones:

Las variables en las funciones se usan de igual manera que en los procedimientos almacenados, se declaran con la sentencia DECLARE, y se asignan valores con la sentencia SET.

DELIMITER //

CREATE FUNCTION holaMundo() RETURNS VARCHAR(30)
BEGIN
  DECLARE salida VARCHAR(30) DEFAULT 'Hola mundo';
;
  SET salida = ‘Hola mundo con variables’;
  RETURN salida;
END
//

Esta variable es de ámbito local, y será destruida una vez finalice la función. Cabe destacar el uso de la sentencia DEFAULT en conjunto con DECLARE, que asigna un valor por defecto al declarar la variable.

Uso de parámetros en funciones:

DROP FUNCTION IF EXISTS holaMundo

CREATE FUNCTION holaMundo(entrada VARCHAR(20)) RETURNS VARCHAR(20)
BEGIN
  DECLARE salida VARCHAR(20);
  SET salida = entrada;
  RETURN salida;
END

Ahora hemos creado una función que devuelve el mismo valor que le pasamos como parámetro.

Si tecleamos :

mysql> select holaMundo("nosolocodigo")//
+---------------------------+
| holaMundo("nosolocodigo") |
+---------------------------+
| nosolocodigo             |
+---------------------------+
1 row in set (0.00 sec)

Obtenemos como resultado lo mismo que le hemos pasado como párametro, en este caso «nosolocodigo»

Para finalizar, algo un poco más complejo, vamos a crear una función que acepte un dividendo y un divisor y haga una división sin usar el operador división:

create function divide(dividendo int,divisor int) returns int
begin
    declare aux int;
    declare contador int;
    declare resto int;
    set contador = 0;
    set aux = 0;
    while (aux + divisor) <= dividendo do
        set aux = aux + divisor ;
        set contador = contador + 1;
    end while;
    set resto = dividendo - aux ;
return contador;
end;
//

Para usarlo, simplemente llamaríamos a la función así:

SELECT divide(20,2)

Lo que devolvería 10.

Mirar el post sobre el control de flujo con procedimientos almacenados si no entiendes esta última función.

Compartir:
Abrir chat
¿Tienes alguna duda que podamos aclarar?