mysql存储历程返回多个效果集
发布时间:08/01 来源:未知 浏览:
关键词:
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 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语句输出变量值:
+----------+-----------+-----------+-----------+ | @shipped | @canceled | @resolved | @disputed | +----------+-----------+-----------+-----------+ | 22 | 0 | 1 | 1 | +----------+-----------+-----------+-----------+ 1 row in set
以上就是mysql存储历程返回多个效果集的细致内容,更多请关注 百分百源码网 其它相干文章!