MySQL存儲函數只返回一個值。要開發返回多個值的存儲過程,需要使用帶有
INOUT
或
OUT
參數的存儲過程。
返回多個值的存儲過程示例:
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
, resolved
和 disputed
。 在存儲過程中,使用帶有COUNT函數的SELECT語句根據訂單狀態獲取相應的訂單總數,並將其分配給相應的參數。
要使用get_order_by_cust
存儲過程,可以傳遞客戶編號和四個用戶定義的變量來獲取輸出值。
執行存儲過程后,使用SELECT
語句輸出變量值。結果如下: