MySQL 调用存储过程与存储函数

365bet投注在线 admin 2025-10-09 01:19:50

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

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

相关文章

为什么那么多人喜欢金泰妍,现在终于知道了

固态硬盘制造商OCZ申请破产

好吃到爆的烤香菇的做法

阿根廷国家男子足球队:三次世界杯冠军与辉煌历史回顾

安顺印象

《悦动圈》设置目标步数的方法介绍

万年历与老黄历准确性对比分析,传统历法与现代工具的碰撞,谁更值得信赖

二胎临产前的征兆有哪些❗️

身高170体重120穿什么码 衣服码数对照表