mysql存储过程返回多个结果集吗
本篇文章将介绍存储过程返回多个结果集时是什么结果,希望给大家以参考作用。
mysql存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。
咱们先来看一个orders表它的结构: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)的订单总数(多个结果集):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 SELECTcount(*) INTO shippedFROMordersWHEREcustomerNumber = cust_noAND status = 'Shipped';-- canceled SELECTcount(*) INTO canceledFROMordersWHEREcustomerNumber = cust_noAND status = 'Canceled';-- resolved SELECTcount(*) INTO resolvedFROMordersWHEREcustomerNumber = cust_noAND status = 'Resolved';-- disputed SELECTcount(*) INTO disputedFROMordersWHEREcustomerNumber = cust_noAND status = 'Disputed'; END其实,除IN参数之外,存储过程还需要4个额外的OUT参数:shipped, canceled, resolved 和 disputed。 在存储过程中,使用带有count函数的select语句根据订单状态获取相应的订单总数,并将其分配给相应的参数。按着上面的sql,我们如果要使用get_order_by_cust存储过程,可以传递客户编号和四个用户定义的变量来获取输出值。执行存储过程后,我们再使用SELECT语句输出变量值:+----------+-----------+-----------+-----------+| @shipped | @canceled | @resolved | @disputed |+----------+-----------+-----------+-----------+|22 |0 |1 |1 |+----------+-----------+-----------+-----------+1 row in set以上就是mysql存储过程返回多个结果集吗的详细内容,更多请关注小潘博客其它相关文章!