MySQL 存储函数

MySQL 存储函数

在MySQL中,存储函数是一组执行某些任务/操作并返回单个值的SQL语句。它是MySQL中存储程序的一种类型。创建存储函数时,确保您具有CREATE ROUTINE数据库权限。通常,我们使用该函数封装常见业务规则或在存储程序或SQL语句中可重用的公式。

存储函数与MySQL中的存储过程几乎相似,但有一些不同之处,如下所示:

  • 函数参数只能包含 输入参数 ,不能允许指定此参数,而存储过程可以允许 输入,输出,输入/输出参数
  • 存储函数只能返回在函数头中定义的单个值。
  • 存储函数也可以在SQL语句中被调用。
  • 它可能不会产生结果集。

因此,在我们的程序目的只是计算和返回单个值或创建用户定义函数时,我们将考虑使用存储函数。

在MySQL中创建存储函数的语法如下:

使用的参数

存储函数语法使用以下参数,详细讨论如下:

参数名称 描述
fun_name 这是我们想在数据库中创建的存储函数的名称。它不应该与MySQL的内置函数名称相同。
fun_parameter 它包含函数体使用的参数列表。不允许指定IN、OUT、INOUT参数。
datatype 它是函数返回值的数据类型。应该是任何有效的MySQL数据类型。
characteristics 只有在声明中定义了特性(DETERMINISTIC、NO SQL或READS SQL DATA),CREATE FUNCTION语句才会被接受。
fun_body 此参数包含一组用于执行操作的SQL语句。它需要至少一个RETURN语句。当执行RETURN语句时,函数将自动终止。函数体如下所示: BEGIN -- SQL statements END $$ DELIMITER

MySQL存储函数示例

让我们通过示例来了解MySQL中存储函数的工作原理。假设我们的数据库有一个名为 “customer” 的表,其中包含以下数据:

MySQL 存储函数

现在,我们将创建一个函数,根据年龄返回 客户职业 使用以下语句。

DELIMITER CREATE FUNCTION Customer_Occupation(
    age int
) 
RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
    DECLARE customer_occupation VARCHAR(20);
    IF age>35 THEN
        SET customer_occupation = 'Scientist';
    ELSEIF (age <= 35 AND            age >= 30) THEN
        SET customer_occupation = 'Engineer';
    ELSEIF age<30 THEN
        SET customer_occupation = 'Actor';
    END IF;
    -- return the customer occupation
    RETURN (customer_occupation);
END
DELIMITER;

在命令行工具上执行上述语句,如下所示:

MySQL 存储函数

一旦函数创建成功,我们可以在MySQL工作台的Function部分中看到它,如下图所示:

MySQL 存储函数

我们还可以使用以下语句查看当前数据库中的所有存储函数:

SHOW FUNCTION STATUS WHERE db = 'mysqltestdb';

执行上述命令后,我们将得到以下输出结果:

MySQL 存储函数

存储函数调用

现在,我们将看到如何使用SQL语句调用存储函数。以下语句使用 customer_occupation 存储函数来获取结果:

SELECT name, age, Customer_Occupation(age)
FROM customer ORDER BY age;

它将输出如下。

MySQL 存储函数

我们还可以在另一个存储过程(如过程、函数、触发器或任何其他MySQL内置函数)中调用上述函数。

过程中的存储函数调用

在这里,我们将看到如何在存储过程中调用此函数。该语句在数据库中创建一个使用 Customer_Occupation() 存储函数的过程。

DELIMITER CREATE PROCEDURE GetCustomerDetail()
BEGIN
    SELECT name, age, Customer_Occupation(age) FROM customer ORDER BY age;
END
DELIMITER ;

以下语句可用于调用存储过程:

CALL GetCustomerDetail();

我们会得到以下输出结果:

MySQL 存储函数

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程