Ejemplos de funciones en Mysql


DELIMITER $$
CREATE DEFINER=`root`@`localhost` 
FUNCTION `doble`(numero int) RETURNS int(11)
BEGIN

RETURN numero*2;
END$$

DELIMITER ;

DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `tipo_pelicula`
(p_film_id int) RETURNS varchar(50) CHARSET latin1
BEGIN
declare v_length int;
select length into v_length from film 
where film_id=p_film_id;

if v_length<=140 then
return 'CORTA';
else
RETURN 'LARGA';
end if;

END$$

DELIMITER ;

DELIMITER $$
USE `sakila`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `factorial`(p_numero int) RETURNS int(11)
BEGIN
declare total,cont int default 1;

while cont<=p_numero do
 set total=total*cont;
 set cont=cont+1;
end while;
RETURN total;
END$$

DELIMITER ;

Uso:


select doble(8);

select title,length,tipo_pelicula(film_id) from film;

select factorial(5);

Más funciones de mysql

Determinar si una cadena es o no vocal:

CREATE FUNCTION `esvocal`(cadena char(1)) 
RETURNS tinyint(1)
BEGIN


RETURN lcase(cadena) regexp '[aeiou]';
END

Contar las vocales de una cadena:

CREATE 
FUNCTION `vocales`(cadena varchar(100)) 
RETURNS int(11)
BEGIN

declare total,cont int default 0;

while cont<length(cadena) do
set cont=cont+1;

if esvocal(substring(cadena,cont,1)) then
 set total=total+1;
end if;

end while;

RETURN total;
END

Cambiar las vocales a mayúsculas y el resto a minúsculas:

CREATE 
FUNCTION `texto_molon`(cadena varchar(100)) 
RETURNS varchar(100) 
BEGIN
declare cont int default 1;
declare res varchar(100) default '';
declare c varchar(1);
while cont<length(cadena) do
set c=substring(cadena,cont,1);
if esvocal(c) then
 set res=concat(res,ucase(c));
 else
 set res=concat(res,lcase(c));
end if;

set cont=cont+1;
end while;
RETURN res;
END

Ejemplos de funciones en mysql

Prueba de variables:

CREATE FUNCTION `borrame` ()
RETURNS INTEGER
BEGIN

declare var int;
declare nombre varchar(50);
declare num int;

set nombre='juan';

set var=5;

set var=var+3;

select count(actor_id) into num from actor;

RETURN num+var+length(nombre);
END

Usar un parámetro y un into variable:

CREATE FUNCTION `actores_como`(cadena varchar(50)) 
RETURNS int(11)
BEGIN

declare total int;
select count(actor_id) into total from actor 
where first_name like concat('%',cadena,'%') 
or last_name like concat('%',cadena,'%') ;
RETURN total;
END

Uso de if:

CREATE 
FUNCTION `tipo_sueldo`(sueldo INT) 
RETURNS varchar(10) 
BEGIN
DECLARE a VARCHAR(10);

IF sueldo>1500 then
RETURN 'ALTO';
ELSE
RETURN 'BAJO';
END IF;

END

Uso de case:

CREATE FUNCTION `tipo_sueldo_ampliado`(sueldo int) 
RETURNS varchar(30) 
BEGIN
declare tipo varchar(30);

case
 when sueldo<1500 then
 set tipo='bajo';
 when sueldo<2500 then
 set tipo='medio';
 else
 set tipo='alto';
end case;

RETURN tipo;
END

Uso de while:

CREATE FUNCTION `factorial`(num int)
 RETURNS int(11)
BEGIN
declare total,cont int default 1;

while cont<=num do
 set total=total*cont;
 set cont=cont+1;
end while;

RETURN total;
END