内容正文:
河北省(计算机类)对口招生
《数据库原理与应用技术-MySQL》复习讲义
模块4 MySQL数据库编程
考点 16 存储函数
【考纲要求】
1.掌握存储函数的基本概念、特点与作用;
2.掌握存储函数的基本概念及构造方法;
3.掌握使用SQL 语句创建、修改、删除存储函数的操作方法及应用;
4.掌握存储函数的调用方法;
【知识网络】
【知识和技能要点】
一、存储函数
1.定义
存储函数(自定义函数)是一组经过编译、封装特定业务逻辑的SQL语句集合,存储在数据库中。用户可通过函数名调用,传入指定参数,最终必须返回一个唯一结果值。
2.核心特点
(1)预编译性:创建时完成语法编译与优化,首次创建后永久存储在数据库,重复调用无需重新编译,执行效率高。
(2)封装性:将复杂的查询、计算、判断逻辑封装,隐藏底层SQL细节,简化外部调用操作。
(3)参数唯一性:仅支持IN输入参数,不支持OUT、INOUT参数,杜绝参数输出混乱问题。
(4) 强制返回值:语法规定必须使用RETURN语句返回一个指定类型的数据,缺一不可。
(5)依附数据库:独立于数据表存在,依附数据库生效,删除数据表不会影响存储函数。
(6)可复用性:一次创建,多次、多处调用,支持跨SQL语句复用。
3.主要作用
(1)简化复杂数据计算:封装累加、判断、数值换算、统计计算等重复逻辑。
(2)减少代码冗余:统一封装通用逻辑,避免重复编写相同SQL语句。
(3)提升执行效率:预编译特性,相比原生零散SQL执行速度更快。
(4)规范业务逻辑:统一数据处理规则,保证全库数据计算标准一致。
(5)适配SQL内嵌调用:可直接用于SELECT、WHERE、ORDER BY等语句中,灵活性远高于存储过程。
二、存储函数相关的方法
1.创建存储函数基本语法形式如下:
CREATE FUNCTION <函数名> ([参数名 数据类型[,....]])
RETURNS <返回类型>
BEGIN
<过程体>
END
2.调用存储函数
SELECT <函数名 (实参数名)>
3.查看存储函数
(1)使用SHOW STATUS语句查看存储函数的状态
SHOW FUNCTION STATUS [ LIKE <函数名 >]
(2)使用SHOW CREATE语句查看存储函数的定义
SHOW CREATE FUNCTION <函数名>
(3)从information_schema.Routines表中查看存储函数信息
SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME=’数据库名’;
4. 修改存储函数
ALTER FUNCTION <函数名> [characteristic ....]
5. 删除存储函数
DROP FUNCTION <IF EXISTS> [ 函数名 ]
三、存储函数与存储过程对比
对比维度
存储过程
存储函数
返回值
无或多个返回值
必须且仅有一个返回值
参数类型
IN、OUT、INOUT
仅支持IN
调用方式
CALL 语句单独调用
SELECT 内嵌调用
适用场景
复杂业务、增删改批量操作
数据计算、数值判断、结果查询
【练习题】
一、填空题
1.存储函数调用后,必须返回________个结果值。
2.创建存储函数时,必须使用________子句指定返回值的数据类型。
3.查看存储函数状态信息的语句是 SHOW ________ STATUS。
4.要获取存储函数的定义,可以使用________命令。
5.存储函数中,变量的声明使用关键字________ 。
二、选择题
1.下列关于存储函数的定义,描述正确的是( )
A. 存储函数是单一查询语句,无需编译
B. 存储函数是编译后存储在数据库、可调用、必须返回唯一结果值的SQL语句集合
C. 存储函数需要依附数据表才能存在
D. 存储函数可以没有返回值
2.存储函数区别于存储过程最核心的特点是( )
A. 支持封装 B. 预编译执行 C. 必须且仅有一个返回值 D. 可复用
3.存储函数支持的参数类型有( )
A. IN、OUT、INOUT B. 仅IN C. 仅OUT D. 仅INOUT
4.存储过程和存储函数相比,说法正确的是( )
A. 函数支持多返回值 B. 过程只能SELECT调用
C. 函数必须单返回值 D. 过程仅支持IN参数
5.下列关于 RETURN 和 RETURNS 的说法,正确的是( )
A. 两者作用完全相同
B. RETURN 用于返回值,RETURNS 用于声明返回类型
C. RETURNS 用于返回值,RETURN 用于声明返回类型
D. 两者都用于声明返回类型
6.存储函数与存储过程的共同点是( )
A. 都可以存储在数据库中 B. 都必须返回一个值
C. 都只能使用 IN 参数 D. 都使用 CALL 语句调用
7.在MySQL中,如何调用一个带有参数的存储函数( )
A.使用CALL语句并传递参数 B.使用EXECUTE语句并传递参数
C.使用SELECT语句并传递参数 D.直接使用函数名并传递参数
8.在MySQL中修改存储函数时,以下( )是子程序包含读数据的语句。
A. CONTAINS SQL B. READSSQL DATA
C. MODIFIES SQL DATA D. NO SQL
9.开发人员创建了一个存储函数 calc_tax(amount DECIMAL(10,2)) RETURNS DECIMAL(10,2),函数体中使用 IF 语句判断金额区间并返回对应税额。下列关于该函数的说法,正确的是( )
A. 该函数可以通过 OUT 参数将税额传递给调用者
B. 该函数可以返回多个不同税率区间的计算结果
C. 该函数只能通过 RETURN 语句返回一个税额值
D. 该函数必须使用 CALL 语句才能执行
10.数据库中有存储函数 format_order_status(status_code INT) RETURNS VARCHAR(20),用于将订单状态码转换为可读文本。现需要查询订单表中状态为"已发货"的订单,下列语句中能正确利用该函数进行条件筛选的是( )
A. SELECT * FROM orders WHERE format_order_status(status) = '已发货';
B. SELECT * FROM orders CALL format_order_status(status) = '已发货';
C. SELECT * FROM orders WHERE status = format_order_status('已发货');
D. CALL format_order_status(status) WHERE status = '已发货';
3、 判断题
1.存储函数可以嵌入 SELECT 语句中使用。()
2.删除数据表后,该表相关的存储函数会自动删除。()
3.存储函数具有预编译性,重复调用时通常不需要重新编译。( )
4.存储函数通常使用 CALL 语句调用。()
5.存储函数可以多次调用,具有可复用性。()
6.存储过程和存储函数在语法上是完全相同的。()
7.存储函数的主体部分可以包含控制流语句,如IF、WHILE等。()
8.存储函数中必须使用 RETURN 语句返回结果。()
9.在存储函数中,可以使用RETURN语句来返回一个值。()
10.存储函数可以隐藏底层 SQL 细节,简化外部调用。()
4、 程序读程题
1. 下列程序的运行结果为______
CREATE FUNCTION sum_prime() RETURNS INT
BEGIN
DECLARE num INT DEFAULT 2;
DECLARE i INT DEFAULT 2;
DECLARE flag INT DEFAULT 1;
DECLARE total INT DEFAULT 0;
WHILE num <= 20 DO
SET flag = 1;
SET i = 2;
WHILE i < num DO
IF num % i = 0 THEN
SET flag = 0;
END IF;
SET i = i + 1;
END WHILE;
IF flag = 1 THEN
SET total = total + num;
END IF;
SET num = num + 1;
END WHILE;
RETURN total;
END
2. 下列程序执行后,调用 SELECT gcd(48,18); 的返回值为_________
CREATE FUNCTION gcd(a INT, b INT) RETURNS INT
BEGIN
DECLARE temp INT;
WHILE b != 0 DO
SET temp = a % b;
SET a = b;
SET b = temp;
END WHILE;
RETURN a;
END
【答案】
一、填空题
1. 一 2.RETURNS 3.FUNCTION 4. SHOW CREATE FUNCTION 5.DECLARE
二、选择题
1.B 2. C 3. B 4. C 5. B 6.A 7. C 8. B 9. C 10.A
三、判断题
1. √ 2. × 3.√ 4. × 5. √ 6.× 7.√ 8. √ 9. √ 10. √
四、程序读程题
1.77 2. 6
原创精品资源学科网独家享有版权,侵权必究
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$