一、调用存储过程 (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` 子句中)

主要用途  执行复杂的逻辑操作(增删改、事务)  进行计算并返回结果

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)