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

相关推荐
stevenzqzq32 分钟前
Android Jetpack Compose 列表开发指南:为什么你不需要再为底部 Item 写额外间距
android·android jetpack
撩得Android一次心动8 小时前
Jetpack Compose 知识点整理2【个人用】
android·笔记·学习·kotlin·compose
是真的小外套9 小时前
2024年软考中级信息安全工程师|选择题考点+案例分析真题解析(含答案)
android·网络
L00111 小时前
MySQL5.7 DATE 字段无法设置默认日期?用触发器搞定|个人任务清单项目实战
mysql
用户20187928316711 小时前
一文讲透 Android Native Heap 监控原理:一间"只进不出"的仓库,和总部派来的侦探
android
YB137512 小时前
Jetpack Compose 动画animate*AsState
android
高晶12 小时前
Android 通讯录应用开发实战:从零搭建 SQLite 数据持久化完整项目
android·设计模式·前端框架
不像程序员的程序媛13 小时前
导出mysql数据结构
数据库·mysql
隐擎fox13 小时前
深入 Android 移动端风控与协议层对抗:内核级虚拟环境检测、网络堆栈特征伪装与住宅 IP 协同实战
android·网络·python·网络协议·tcp/ip
鱼很腾apoc13 小时前
【MySQL】第4期 用户管理与 C 语言连接编程详解
linux·服务器·c语言·mysql·connector/c