MariaDB 函数是一个存储的程序,用于将参数传递给它们并获取函数的返回值。
我们可以在 MariaDB 中创建和删除函数。
1. MariaDB 创建函数
可以在 MariaDB 中创建自己的函数:
语法:
CREATE
[ DEFINER = { CURRENT_USER | user_name } ]
FUNCTION function_name [ (parameter datatype [, parameter datatype]) ]
RETURNS return_datatype [ LANGUAGE SQL
| DETERMINISTIC
| NOT DETERMINISTIC
| { CONTAINS SQL
| NO SQL
| READS SQL DATA
| MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'comment_value'
BEGIN
declaration_section
executable_section
END;
1. 创建函数
在 MariaDB 数据库中创建一个函数CalcValue
。参考下面代码 -
DELIMITER //
CREATE FUNCTION CalcValue ( starting_value INT )
RETURNS INT DETERMINISTIC
BEGIN
DECLARE total_value INT;
SET total_value = 0;
label1: WHILE total_value <= 3000 DO
SET total_value = total_value + starting_value;
END WHILE label1;
RETURN total_value;
END; //
DELIMITER ;
参数说明
- DEFINER 子句:它是一个可选的子句。如果没有指定,定义者是创建函数的用户。如果您希望指定不同的定义者,则必须包含
DEFINER
子句,其中user_name
是该函数的定义者。 - function_name:指定要在 MariaDB 中分配给此函数的名称。
- return_datatype:它指定函数返回值的数据类型。
- LANGUAGE SQL:语法为可移植语法,但不会影响函数。
- DETERMINISTIC:表示该函数将总是返回给定一组输入参数的一个结果。
- NOT DETERMINISTIC:表示给定一组输入参数,该函数可能会返回不同的结果。结果可能受到表数据,随机数字或服务器变量的影响。
- CONTAINS SQL:这是默认的。这是一个告知 MariaDB 该函数包含 SQL 的信息性子句,但数据库不验证为真。
- NO SQL:没有使用的信息性子句将不会影响函数。
- READS SQL DATA:一个告知 MariaDB 该函数将使用
SELECT
语句读取数据但不修改任何数据的信息性子句。 - MODIFIES SQL DATA:一个告知 MariaDB 该函数将使用
INSERT
,UPDATE
,DELETE
或其他 DDL 语句修改 SQL 数据的信息性子句。 - declaration_section:声明局部变量的函数的地方。
- executable_section:在函数中输入函数代码的地方。
2. 调用函数
可以看到程序成功执行并创建了一个新的函数。现在可以调用这个新创建的函数了,如下所示:
3. 删除函数
要删除 MariaDB 数据库中的自定义函数很容易。比如要上我们上面创建的函数,请参考以下语法。
语法:
DROP FUNCTION [ IF EXISTS ] function_name;
参数说明
- function_name:它指定想要删除的函数的名字。
示例:
在上面,我们已经创建了一个名为“CalcValue”的函数。假设现在要删除这个函数,可通过以下语句 -
DROP FUNCTION CalcValue;
现在,可以看到该函数已被删除,不再出现在左侧列表中。
或通过查询下面语句 -
MariaDB [testdb]> SELECT *, EVENT_SCHEMA AS `Db`, EVENT_NAME AS `Name` FROM information_schema.`EVENTS` WHERE `EVENT_SCHEMA`='testdb';
Empty set (0.01 sec)