Funciones Mysql

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 5

Funciones MySQL

Una función almacenada es un programa almacenado de tipo especial que devuelve un solo
valor. Normalmente, utiliza funciones almacenadas para encapsular fórmulas comunes o
reglas comerciales que son reutilizables entre sentencias SQL o programas almacenados.

A diferencia de un procedimiento almacenado , puede usar una función almacenada en


sentencias SQL donde sea que se use una expresión. Esto ayuda a mejorar la legibilidad y la
facilidad de mantenimiento del código de procedimiento.
CREATE FUNCTION

instrucciones.

A continuación se ilustra la sintaxis básica para crear una nueva función almacenada:
1 DELIMITER $$

3 CREATE FUNCTION function_name(

4 param1,

5 param2,…

6 )

7 RETURNS datatype

8 [NOT] DETERMINISTIC

9 BEGIN

10 -- statements

11 END $$

12

13 DELIMITER ;

En esta sintaxis:
En primer lugar , especifique el nombre de la función almacenada que desea crear después de
las CREATE FUNCTION palabras clave.

En segundo lugar, enumere todos los parámetros de la función almacenada dentro de los
paréntesis seguidos del nombre de la función. Por defecto, todos los parámetros son IN. No se
puede especificar IN, OUTo INOUT modificadores a los parámetros

En tercer lugar, especifique el tipo de datos del valor de retorno en la RETURNSinstrucción, que
puede ser cualquier tipo de datos MySQL válido .
Cuarto, especifique si una función es determinista o no utiliza la DETERMINISTIC palabra
clave.

Una función determinista siempre devuelve el mismo resultado para los mismos parámetros
de entrada, mientras que una función no determinista devuelve resultados diferentes para
los mismos parámetros de entrada.

Si no usa DETERMINISTIC o NOT DETERMINISTIC, MySQL usa la NOT DETERMINISTIC opción


por defecto.

Quinto, escriba el código en el cuerpo de la función almacenada en el bloque BEGIN


END. Dentro de la sección del cuerpo, debe especificar al menos una declaración RETUR que
devuelve un valor a los programas que llaman. Cada vez que se alcanza la declaración
RETURN, la ejecución de la función almacenada finaliza inmediatamente.
CREATE FUNCTION Ejemplo de MySQL

La siguiente declaración CREATE FUNCTION crea una función que devuelve el nivel de cliente
en función del crédito:

1 DELIMITER $$

3 CREATE FUNCTION CustomerLevel(

4 credit DECIMAL(10,2)

5 )

6 RETURNS VARCHAR(20)
7 DETERMINISTIC

8 BEGIN

9 DECLARE customerLevel VARCHAR(20);

10

11 IF credit > 50000 THEN

12 SET customerLevel = 'PLATINUM';

13 ELSEIF (credit >= 50000 AND

14 credit <= 10000) THEN

15 SET customerLevel = 'GOLD';

16 ELSEIF credit < 10000 THEN

17 SET customerLevel = 'SILVER';

18 END IF;

19 -- return the customer level

20 RETURN (customerLevel);

21 END$$

22 DELIMITER ;

Llamar a una función almacenada en una instrucción SQL desde consola:


La siguiente declaración utiliza la función almacenada CustomerLevel:

1 SELECT
2 customerName,
3 CustomerLevel(creditLimit)
4 FROM
5 customers
6 ORDER BY
7 customerName;
Llamar a una función almacenada en un procedimiento almacenado

La siguiente instrucción crea un nuevo procedimiento almacenado que llama a

la función almacenada CustomerLevel():

1 DELIMITER $$

3 CREATE PROCEDURE GetCustomerLevel(

4 IN customerNo INT,

5 OUT customerLevel VARCHAR(20)

6 )

7 BEGIN

9 DECLARE credit DEC(10,2) DEFAULT 0;

10

11 -- get credit limit of a customer

12 SELECT

13 creditLimit

14 INTO credit

15 FROM customers

16 WHERE

17 customerNumber = customerNo;

18

19 -- call the function

20 SET customerLevel = CustomerLevel(credit);


21 END$$

22

23 DELIMITER ;

A continuación se ilustra cómo llamar al GetCustomerLevel() procedimiento


almacenado:

1 CALL GetCustomerLevel(-131,@customerLevel);
2 SELECT @customerLevel;

Es importante tener en cuenta que si una función almacenada contiene instrucciones SQL que
consultan datos de tablas, entonces no debe usarla en otras instrucciones SQL; de lo contrario,
la función almacenada disminuirá la velocidad de la consulta.

También podría gustarte