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】中返回的结果相同。存储函数和存储过程可以实现相同的功能,读者在实际应用中应该灵活选择。

相关推荐
2601_9498333920 分钟前
flutter_for_openharmony口腔护理app实战+知识实现
android·javascript·flutter
晚霞的不甘22 分钟前
Flutter for OpenHarmony从基础到专业:深度解析新版番茄钟的倒计时优化
android·flutter·ui·正则表达式·前端框架·鸿蒙
invicinble35 分钟前
对于mysql层对sql层面的知识体系的理解和把握
数据库·sql·mysql
鸟儿不吃草1 小时前
android的Retrofit请求https://192.168.43.73:8080/报错:Handshake failed
android·retrofit
Minilinux20181 小时前
Android音频系列(09)-AudioPolicyManager代码解析
android·音视频·apm·audiopolicy·音频策略
Nandeska1 小时前
14、MySQL基于GTID的数据同步
数据库·mysql
kyle-fang1 小时前
阿里云服务器部署MySQL
服务器·mysql·阿里云
李子红了时1 小时前
【无标题】
android
我是黄骨鱼2 小时前
【零基础学数据库|第二篇】MySql启动!!!
数据库·mysql
Dxy12393102162 小时前
MySQL删除表语句详解
数据库·mysql