mysql | Crear función almacenada

La sentencia CREATE FUNCTION se utiliza para crear una función almacenada y funciones definidas por el usuario. Una función almacenada es un conjunto de instrucciones SQL que realizan alguna operación y devuelven un único valor.

Al igual que la función incorporada de Mysql, se puede llamar desde una declaración de Mysql.

De forma predeterminada, la función almacenada está asociada con la base de datos predeterminada.

La instrucción CREATE FUNCTION requiere el privilegio de base de datos CREATE ROUTINE .

Sintaxis: 
La sintaxis para la instrucción CREATE FUNCTION en Mysql es: 
 

CREATE FUNCTION function_name(func_parameter1, func_parameter2, ..)
          RETURN datatype [characteristics]
          func_body

Parámetros utilizados:

  1. function_name: 
    Es el nombre con el que se llama a la función almacenada. El nombre no debe ser el mismo que el de la función nativa (incorporada). Para asociar la rutina explícitamente con una función de base de datos específica, el nombre debe ser nombre_base_datos.nombre_func .
  2. func_parameter: 
    Es el argumento cuyo valor es utilizado por la función dentro de su cuerpo. No puede especificar estos parámetros IN, OUT, INOUT . La declaración de parámetros entre paréntesis se proporciona como tipo func_parameter . Aquí, el tipo representa un tipo de datos Mysql válido.
  3. tipo de datos: 
    es el tipo de datos del valor devuelto por la función.
  4. características: 
    la declaración CREATE FUNCTION se acepta solo si al menos una de las características { DETERMINISTIC, NO SQL o READS SQL DATA } se especifica en su declaración.

func_body es el conjunto de declaraciones de Mysql que realizan la operación. Su estructura es la siguiente:

BEGIN

        Mysql Statements

        RETURN expression;
END

El cuerpo de la función debe contener una instrucción RETURN. 
 

Ejemplo:

Considere seguir la tabla de empleados:

emp_id fnombre nombre fecha de inicio
1 Miguel Herrero 2001-06-22
2 susana Pregonero 2002-09-12
3 roberto Tvler 2000-02-09
4 susana Hawthorne 2002-04-24

Tenemos que encontrar el número de años que el empleado ha estado en la empresa-

DELIMITER //

CREATE FUNCTION no_of_years(date1 date) RETURNS int DETERMINISTIC
BEGIN
 DECLARE date2 DATE;
  Select current_date()into date2;
  RETURN year(date2)-year(date1);
END 

//

DELIMITER ;

Llamada de la función anterior:

Select emp_id, fname, lname, no_of_years(start_date) as 'years' from employee;

Producción: 

emp_id fnombre nombre años
1 Miguel Herrero 18
2 susana Pregonero 17
3 roberto Tvler 19
4 susana Hawthorne 17

Publicación traducida automáticamente

Artículo escrito por Tanvi_Garg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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