内容正文:
第11章 函数
主要内容
11.1 函数概述
11.2 创建函数
11.3 调用函数
11.4 查看函数
11.5 修改函数
11.6 删除函数
11.7 MySQL系统函数
11.8 本章小结
11.1 函数概述
函数又称为存储函数,是一种常见的数据库对象。
函数和存储过程共同被称之为存储程序,它们之间有很多相似的地方。
函数与存储过程一样,都是由声明式的SQL语句和过程式的SQL语句组成,并且可以被应用程序和SQL语句调用。
11.1 函数概述
它们之间有以下四点区别:
在MySQL中,函数实现的功能对针对性较强,而存储过程实现的功能通常情况下更复杂。
函数和存储过程一样可以没有参数,但是如果函数有参数的话,只能有IN模式的输入参数,没有输出参数,因为函数自身就是输出参数,而存储过程既有输入参数又有输出参数。
函数中必须包含一条RETURN语句,只能返回一个值或者一个结果集,而存储过程中不允许包含RETURN语句,可以返回一个或多个结果,或者没有返回结果只是完成了某个功能。
函数不能用CALL语句来调用,可以作为语句的一部分来使用,而存储过程一般是作为一个独立的部分来执行,可以通过CALL语句来调用。
11.2 创建函数
11.2.1 使用命令创建函数
语法格式:
CREATE FUNCTION [IF NOT EXISTS]
func_name ([func_parameter[,...]])
RETURNS type
[characteristic ..]
routine_body
11.2 创建函数
11.2.1 使用命令创建函数
characteristic:指定存储过程的特性,有以下5个取值。
LANGUAGE SQL
[NOT] DETERMINISTIC
{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}
SQL SECURITY{DEFINER | INVOKER}
COMMENT 'string'
11.2 创建函数
11.2.1 使用命令创建函数
【例11.1】创建一个函数,根据学生学号返回该学生的选课数量。
在MySQL命令行客户端输入命令:
DELIMITER //
CREATE FUNCTION count_num
( p_sno CHAR(11) )
RETURNS INT
BEGIN
DECLARE v_num INT;
SELECT COUNT(*) INTO v_num FROM score WHERE sno=p_sno;
RETURN v_num;
END //
DELIMITER ;
11.2 创建函数
11.2.1 使用命令创建函数
【例11.2】创建一个函数,根据给定的课程号查找并返回该课程名称,如果没有找到该课程则返回“没有该门课程信息”。
在MySQL命令行客户端输入命令:
DELIMITER //
CREATE FUNCTION fun_find
(p_cno CHAR(3) )
RETURNS VARCHAR(20)
BEGIN
DECLARE v_cname VARCHAR(10);
SELECT cname INTO v_cname
FROM course WHERE cno=p_cno;
IF v_cname IS NULL THEN
RETURN '没有该门课程信息';
ELSE
RETURN v_cname;
END IF;
END //
DELIMITER ;
11.2 创建函数
11.2.2 使用图形化工具创建函数
打开Workbench工具,连接到MySQL服务器。
选中“Schemas”标签,打开“jwgl”数据库,找到“Functions”选项,右键单击“Create Functions...”菜单项,或者直接单击工具栏的 图标,出现如图所示界面。
在该界面中填写相应的函数语句(注意:在该界面中不需要输入DELIMITER语句),然后单击“Apply”,此时出现查看存储过程的SQL脚本的界面。
确认无误后单击右下角的“Apply”,在出现的界面中单击“Finish”,此时函数创建成功。
11.3 调用函数
11.3.1 使用命令调用函数
语法格式:
SELECT func_name ([func_paramet