mysql存储过程返回多个结果集吗


本文摘自PHP中文网,作者(*-*)浩,侵删。

本篇文章将介绍存储过程返回多个结果集时是什么结果,希望给大家以参考作用。

mysql存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。

咱们先来看一个orders表它的结构:

1

2

3

4

5

6

7

8

9

10

11

12

13

mysql> desc orders;

+----------------+-------------+------+-----+---------+-------+

| Field          | Type        | Null | Key | Default | Extra |

+----------------+-------------+------+-----+---------+-------+

| orderNumber    | int(11)     | NO   | PRI | NULL    |       |

| orderDate      | date        | NO   |     | NULL    |       |

| requiredDate   | date        | NO   |     | NULL    |       |

| shippedDate    | date        | YES  |     | NULL    |       |

| status         | varchar(15) | NO   |     | NULL    |       |

| comments       | text        | YES  |     | NULL    |       |

| customerNumber | int(11)     | NO   | MUL | NULL    |       |

+----------------+-------------+------+-----+---------+-------+

7 rows in set

然后嘞,咱们来看一个存储过程,它接受客户编号,并返回发货(shipped),取消(canceled),解决(resolved)和争议(disputed)的订单总数(多个结果集):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

DELIMITER $$

  

CREATE PROCEDURE get_order_by_cust(

 IN cust_no INT,

 OUT shipped INT,

 OUT canceled INT,

 OUT resolved INT,

 OUT disputed INT)

BEGIN

 -- shipped

 SELECT

            count(*) INTO shipped

        FROM

            orders

        WHERE

            customerNumber = cust_no

                AND status = 'Shipped';

  

 -- canceled

 SELECT

            count(*) INTO canceled

        FROM

            orders

        WHERE

            customerNumber = cust_no

                AND status = 'Canceled';

  

 -- resolved

 SELECT

            count(*) INTO resolved

        FROM

            orders

        WHERE

            customerNumber = cust_no

                AND status = 'Resolved';

  

 -- disputed

 SELECT

            count(*) INTO disputed

        FROM

            orders

        WHERE

            customerNumber = cust_no

                AND status = 'Disputed';

  

END

其实,除IN参数之外,存储过程还需要4个额外的OUT参数:shipped, canceled, resolved 和 disputed。 在存储过程中,使用带有count函数的select语句根据订单状态获取相应的订单总数,并将其分配给相应的参数。按着上面的sql,我们如果要使用get_order_by_cust存储过程,可以传递客户编号和四个用户定义的变量来获取输出值。执行存储过程后,我们再使用SELECT语句输出变量值:

1

2

3

4

5

6

+----------+-----------+-----------+-----------+

| @shipped | @canceled | @resolved | @disputed |

+----------+-----------+-----------+-----------+

|       22 |         0 |         1 |         1 |

+----------+-----------+-----------+-----------+

1 row in set

以上就是mysql存储过程返回多个结果集吗的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

mysql子查询的使用详解上篇

mysql数据库增加记录代码是什么?

mysql8.0.30安装配置最详细教程(windows64位)

如何使用zabbix监控mysql

大公司mysql集群用什么

mysql8和mysql5.7的区别有哪些

mysql增删改查语句操作有哪些

mysql中调试存储过程最简单的方法

索引是什么?mysql如何创建索引

mysql 没有my.ini文档怎么办

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...