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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時(shí)間:2023/12/2 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql存储过程返回多个值_数据库mysql存储过程之返回多个值的方法示例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文實(shí)例講述了mysql存儲(chǔ)過(guò)程之返回多個(gè)值的方法。分享給大家供大家參考,具體如下:

mysql存儲(chǔ)函數(shù)只返回一個(gè)值。要開(kāi)發(fā)返回多個(gè)值的存儲(chǔ)過(guò)程,需要使用帶有INOUT或OUT參數(shù)的存儲(chǔ)過(guò)程。咱們先來(lái)看一個(gè)orders表它的結(jié)構(gòu):

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

然后嘞,咱們來(lái)看一個(gè)存儲(chǔ)過(guò)程,它接受客戶編號(hào),并返回發(fā)貨(shipped),取消(canceled),解決(resolved)和爭(zhēng)議(disputed)的訂單總數(shù):

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

其實(shí),除IN參數(shù)之外,存儲(chǔ)過(guò)程還需要4個(gè)額外的OUT參數(shù):shipped, canceled, resolved 和 disputed。 在存儲(chǔ)過(guò)程中,使用帶有count函數(shù)的select語(yǔ)句根據(jù)訂單狀態(tài)獲取相應(yīng)的訂單總數(shù),并將其分配給相應(yīng)的參數(shù)。按著上面的sql,我們?nèi)绻褂胓et_order_by_cust存儲(chǔ)過(guò)程,可以傳遞客戶編號(hào)和四個(gè)用戶定義的變量來(lái)獲取輸出值。執(zhí)行存儲(chǔ)過(guò)程后,我們?cè)偈褂肧ELECT語(yǔ)句輸出變量值:

+----------+-----------+-----------+-----------+

| @shipped | @canceled | @resolved | @disputed |

+----------+-----------+-----------+-----------+

| 22 | 0 | 1 | 1 |

+----------+-----------+-----------+-----------+

1 row in set

結(jié)合實(shí)際應(yīng)用,我們?cè)賮?lái)看下從PHP程序中調(diào)用返回多個(gè)值的存儲(chǔ)過(guò)程:

/**

* 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);

上述代碼中,在@符號(hào)之前的用戶定義的變量與數(shù)據(jù)庫(kù)連接相關(guān)聯(lián),因此它們可用于在調(diào)用之間進(jìn)行訪問(wèn)。

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

更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL存儲(chǔ)過(guò)程技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》及《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》

希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。