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