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

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客

《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com)

MySQL9数据库技术_夏天又到了的博客-CSDN博客

存储过程和存储函数已经定义好了,接下来需要知道如何调用这些过程和函数。存储过程和存储函数有多种调用方法:存储过程必须使用CALL语句调用,并且存储过程和数据库相关,如果要执行其他数据库中的存储过程,需要指定数据库名称,例如CALL dbname.procname;存储函数的调用与MySQL中预定义的函数的调用方式相同。本节将介绍存储过程和存储函数的调用,主要包括调用存储过程的语法、调用存储函数的语法,以及存储过程和存储函数的调用实例。

8.2.1 调用存储过程

存储过程是通过CALL语句进行调用的,语法如下:

CALL sp_name([parameter[,...]])

CALL语句调用一个先前用CREATE PROCEDURE创建的存储过程,其中sp_name为存储过程名称,parameter为存储过程的参数。

【例8.22】定义名为CountProc1的存储过程,然后调用这个存储过程。

定义存储过程的SQL语句如下:

复制代码
mysql> use test_db;
mysql> DELIMITER //
mysql> CREATE PROCEDURE CountProc1 (IN sid INT, OUT num INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO num FROM fruits WHERE s_id = sid;
    -> END //

mysql>  DELIMITER ;

调用存储过程的SQL语句如下:

复制代码
mysql> CALL CountProc1 (101, @num);

查看返回结果:

复制代码
mysql> SELECT @num;
+------+
| @num |
+------+
|    3  |
+------+

该存储过程返回了s_id=101的水果供应商提供的水果种类,返回值存储在变量num中,使用SELECT查看,返回结果为3。

8.2.2 调用存储函数

在MySQL中,存储函数的使用方法与MySQL内部函数的使用方法是一样的。换言之,用户自定义的存储函数与MySQL内部函数是一个性质,区别在于,存储函数是用户自己定义的,而内部函数是MySQL的开发者定义的。

【例8.23】定义存储函数CountProc2,然后调用这个函数,SQL语句如下:

复制代码
mysql> DELIMITER //
mysql> CREATE FUNCTION  CountProc2 (sid INT)
    -> RETURNS INT
    -> BEGIN
    -> RETURN (SELECT COUNT(*) FROM fruits WHERE s_id = sid);
    -> END;
    ->//

mysql>  DELIMITER ;

如果在创建存储函数中报错"you *might* want to use the less safe log_bin_trust_function_creators variable",需要执行以下代码:

复制代码
mysql> SET GLOBAL log_bin_trust_function_creators = 1;

调用存储函数:

复制代码
mysql> SELECT CountProc2(101);
+--------------------+
| Countproc(101)     |   
+--------------------+
|             3      |
+--------------------+
1 row in set (0.00 sec)

可以看到,本例与【例8.22】中返回的结果相同。存储函数和存储过程可以实现相同的功能,读者在实际应用中应该灵活选择。

相关推荐
MiyamuraMiyako17 分钟前
从 0 到发布:Gradle 插件双平台(MavenCentral + Plugin Portal)发布记录与避坑
android
NRatel1 小时前
Unity 游戏提升 Android TargetVersion 相关记录
android·游戏·unity·提升版本
HMBBLOVEPDX1 小时前
MySQL的锁:
数据库·mysql
掉头发的王富贵3 小时前
ShardingSphere-JDBC入门教程(上篇)
spring boot·后端·mysql
叽哥3 小时前
Kotlin学习第 1 课:Kotlin 入门准备:搭建学习环境与认知基础
android·java·kotlin
风往哪边走4 小时前
创建自定义语音录制View
android·前端
用户2018792831674 小时前
事件分发之“官僚主义”?或“绕圈”的艺术
android
用户2018792831674 小时前
Android事件分发为何喜欢“兜圈子”?不做个“敞亮人”!
android
码出财富4 小时前
SQL语法大全指南
数据库·mysql·oracle
Kapaseker5 小时前
你一定会喜欢的 Compose 形变动画
android