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:
- 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 . - 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. - tipo de datos:
es el tipo de datos del valor devuelto por la función. - 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