一、调用存储过程 (CALL PROCEDURE)
存储过程使用专门的 `CALL` 语句来调用。
基本语法:
CALL sp_name([parameter[, ...]]);
`sp_name`:要调用的存储过程的名称。
`parameter`:传递给存储过程的参数。参数的数量、顺序和类型必须与过程定义时声明的参数一致。
重要特点:
即使存储过程没有参数,调用时也必须带上括号 `()`。
存储过程可以返回多个结果集(比如执行多个 `SELECT` 语句),也可以通过 `OUT`/`INOUT` 参数返回值。
示例:
调用一个无参过程 `ShowStuScore` 和一个有参过程 `GetScoreByStu`。
调用无参过程,可能返回一个学生分数列表
mysql> CALL ShowStuScore();
student_name student_score
Dany 90
Green 99
10 rows in set (0.00 sec)
Query OK, 0 rows affected (0.02 sec)
调用有参过程,传入参数 'Green',返回该学生的分数
mysql> CALL GetScoreByStu('Green');
student_score
99
1 row in set (0.03 sec)
Query OK, 0 rows affected (0.03 sec)
二、调用存储函数 (CALL FUNCTION)
存储函数的调用方式与 MySQL 内置函数(如 `NOW()`, `SUM()`)完全相同。
基本语法:
SELECT function_name([parameter[, ...]]);
`function_name`:要调用的存储函数的名称。
`parameter`:传递给存储函数的参数。
重要特点:
存储函数返回一个单一的值,因此它最常出现在 `SELECT` 语句的字段列表中,也可以用在 `WHERE`, `ORDER BY` 等子句或赋值给变量。
它不能直接返回结果集,也不能使用 `OUT`/`INOUT` 参数。
示例:
调用存储函数 `func_student`,根据学生 ID 查询其姓名。
mysql> SELECT func_student(3);
func_student(3)
王五
1 row in set (0.10 sec)
也可以在查询中与其他字段一起使用
mysql> SELECT id, func_student(id) AS name FROM some_table;
三、存储过程 vs. 存储函数:调用方式对比
特性 存储过程 (PROCEDURE) 存储函数 (FUNCTION)
调用语句 `CALL` `proc_name();` `SELECT` `func_name();`
返回值 可返回多个结果集或通过`OUT`参数返回 必须返回一个标量值(单个值)
能否在SQL语句中嵌入 不能 可以(如 `SELECT`, `WHERE` 子句中)
主要用途 执行复杂的逻辑操作(增删改、事务) 进行计算并返回结果
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程