MySQL存儲過程返回多個值【5】


MySQL存儲函數只返回一個值。要開發返回多個值的存儲過程,需要使用帶有 INOUTOUT參數的存儲過程。

返回多個值的存儲過程示例:

SELECT * FROM orders;

 

原表的數據如上面所示。返回多個值,其實就是多設置幾個inout/out的參數。

SQL 如下:

USE yiibaidb;
DROP PROCEDURE IF EXISTS get_order_by_cust;

-- 以下存儲過程接受客戶編號,並返回發貨(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
SELECT  COUNT(*) INTO shipped FROM orders WHERE customerNumber=cust_no AND STATUS=shipped;
SELECT  COUNT(*) INTO canceled FROM orders WHERE customerNumber=cust_no AND STATUS=canceled;
SELECT  COUNT(*) INTO resolved FROM orders WHERE customerNumber=cust_no AND STATUS=resolved;
SELECT  COUNT(*) INTO disputed FROM orders WHERE customerNumber=cust_no AND STATUS=disputed;
END $$
DELIMITER;

CALL get_order_by_cust(141,@shipped,@canceled,@resolved,@disputed);

SELECT @shipped,@canceled,@resolved,@disputed;

IN參數之外,存儲過程還需要4個額外的OUT參數:shipped, canceled, resolveddisputed。 在存儲過程中,使用帶有COUNT函數的SELECT語句根據訂單狀態獲取相應的訂單總數,並將其分配給相應的參數。

要使用get_order_by_cust存儲過程,可以傳遞客戶編號和四個用戶定義的變量來獲取輸出值。

執行存儲過程后,使用SELECT語句輸出變量值。結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM