Mysql 简明教程

MySQL - Stored Functions

MySQL Stored Functions

Stored Function 是一组执行特定操作然后返回单个值SQL语句。与MySQL中的内置函数类似,可以在任何MySQL语句中调用存储函数。MySQL CREATE FUNCTION 语句用于创建存储函数和用户定义的函数。

默认情况下,存储函数与默认数据库关联。为了使用CREATE FUNCTION语句,用户必须具有CREATE ROUTINE数据库特权。

Syntax

以下是创建新存储函数的语法 -

CREATE FUNCTION function_name(
   parameters...
)
RETURN datatype [characteristics]
func_body;

其中,

  1. function_name: 这是我们正在创建的函数的名称。名称不应与MySQL内置函数名称相同。

  2. parameters: 这是函数的所有参数的列表。默认情况下,所有参数都是IN参数。我们不能向参数指定IN、OUT或INOUT修饰符。

  3. characteristics: 这是函数返回的值的数据类型。

  4. datatype: 仅当在声明中至少指定一个特性(DETERMINISTIC、NO SQL或READS SQL DATA)时,才会接受CREATE FUNCTION语句。

  5. fun_body: 这里包含一组MySQL语句,这些语句定义了BEGIN和END命令之间的函数行为。

Example

首先,我们使用以下查询创建一个名为 CUSTOMERS 的表 -

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY(ID)
);

在这里,我们将行插入CUSTOMERS表 -

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00),
(2, 'Khilan', 25, 'Delhi', 1500.00),
(3, 'Kaushik', 23, 'Kota', 2000.00),
(4, 'Chaitali', 25, 'Mumbai', 6500.00),
(5, 'Hardik', 27, 'Bhopal', 8500.00),
(6, 'Komal', 22, 'Hyderabad', 4500.00),
(7, 'Muffy', 24, 'Indore', 10000.00);

表格显示为 −

Creating a Function −

使用以下 CREATE FUNCTION 查询,我们创建了一个函数,该函数根据客户的年龄返回其出生年份 -

DELIMITER $$
CREATE FUNCTION DATE_OF_BIRTH(AGE INT) RETURNS INT DETERMINISTIC
BEGIN
   DECLARE currentdate DATE;
   SELECT CURDATE() INTO currentdate;
   RETURN year(currentdate)-AGE;
END $$
DELIMITER ;

现在,我们使用以下查询调用DATE_OF_BIRTH函数 -

SELECT ID, NAME, DATE_OF_BIRTH(AGE)
AS 'YEAR_OF_BIRTH'
FROM CUSTOMERS;

Output

以上查询的输出如下所示:

Calling Stored Function From Stored Procedure

在MySQL中,我们可以从存储过程中调用存储函数。以下语句创建一个名为 StudentDetails() 的存储过程,该过程调用 DATE_OF_BIRTH() 存储函数。

DELIMITER $$
CREATE PROCEDURE CustomerDetails()
BEGIN
SELECT ID, NAME, DATE_OF_BIRTH(AGE) AS 'YEAR_OF_BIRTH'
FROM CUSTOMERS;
END $$
DELIMITER ;

此处,我们使用 CALL 关键字调用 CustomerDetails() 存储过程:

CALL CustomerDetails();

Output

以上查询的输出如下所示: