mysql存儲過程返回多個結果集嗎

本篇文章將介紹存儲過程返回多個結果集時是什么結果,希望給大家以參考作用。

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  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

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享