日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql存储过程返回多个值_数据库mysql存储过程之返回多个值的方法示例

發布時間:2023/12/2 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql存储过程返回多个值_数据库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

結合實際應用,我們再來看下從PHP程序中調用返回多個值的存儲過程:

/**

* Call stored procedure that return multiple values

* @param $customerNumber

*/

function call_sp($customerNumber)

{

try {

$pdo = new PDO("mysql:host=localhost;dbname=yiibaidb", 'root', '123456');

// execute the stored procedure

$sql = 'CALL get_order_by_cust(:no,@shipped,@canceled,@resolved,@disputed)';

$stmt = $pdo->prepare($sql);

$stmt->bindParam(':no', $customerNumber, PDO::PARAM_INT);

$stmt->execute();

$stmt->closeCursor();

// execute the second query to get values from OUT parameter

$r = $pdo->query("SELECT @shipped,@canceled,@resolved,@disputed")

->fetch(PDO::FETCH_ASSOC);

if ($r) {

printf('Shipped: %d, Canceled: %d, Resolved: %d, Disputed: %d',

$r['@shipped'],

$r['@canceled'],

$r['@resolved'],

$r['@disputed']);

}

} catch (PDOException $pe) {

die("Error occurred:" . $pe->getMessage());

}

}

call_sp(141);

上述代碼中,在@符號之前的用戶定義的變量與數據庫連接相關聯,因此它們可用于在調用之間進行訪問。

好啦,本次分享就到這里了。

更多關于MySQL相關內容感興趣的讀者可查看本站專題:《MySQL存儲過程技巧大全》、《MySQL常用函數大匯總》、《MySQL日志操作技巧大全》、《MySQL事務操作技巧匯總》及《MySQL數據庫鎖相關技巧匯總》

希望本文所述對大家MySQL數據庫計有所幫助。

總結

以上是生活随笔為你收集整理的mysql存储过程返回多个值_数据库mysql存储过程之返回多个值的方法示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。