最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql存儲過程之返回多個值的方法示例

 更新時間:2019年12月23日 11:36:55   作者:luyaran  
這篇文章主要介紹了mysql存儲過程之返回多個值的方法,結合實例形式分析了mysql存儲過程返回多個值的實現(xiàn)方法與PHP調(diào)用技巧,需要的朋友可以參考下

本文實例講述了mysql存儲過程之返回多個值的方法。分享給大家供大家參考,具體如下:

mysql存儲函數(shù)只返回一個值。要開發(fā)返回多個值的存儲過程,需要使用帶有INOUT或OUT參數(shù)的存儲過程。咱們先來看一個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

然后嘞,咱們來看一個存儲過程,它接受客戶編號,并返回發(fā)貨(shipped),取消(canceled),解決(resolved)和爭議(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

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

+----------+-----------+-----------+-----------+
| @shipped | @canceled | @resolved | @disputed |
+----------+-----------+-----------+-----------+
|    22 |     0 |     1 |     1 |
+----------+-----------+-----------+-----------+
1 row in set

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

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

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

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

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

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

相關文章

  • MySQL修改lower_case_table_names參數(shù)的方法實踐

    MySQL修改lower_case_table_names參數(shù)的方法實踐

    本文主要介紹了MySQL修改lower_case_table_names參數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • 兩個MySql服務的應用

    兩個MySql服務的應用

    兩個MySql服務的應用兼容方法。
    2009-10-10
  • Mysql存儲過程、觸發(fā)器、事件調(diào)度器使用入門指南

    Mysql存儲過程、觸發(fā)器、事件調(diào)度器使用入門指南

    存儲過程(Stored Procedure)是一種在數(shù)據(jù)庫中存儲復雜程序的數(shù)據(jù)庫對象。為了完成特定功能的SQL語句集,經(jīng)過編譯創(chuàng)建并保存在數(shù)據(jù)庫中,本文給大家介紹Mysql存儲過程、觸發(fā)器、事件調(diào)度器使用入門指南,感興趣的朋友一起看看吧
    2022-01-01
  • MySQL慢查詢?nèi)罩?Slow Query Log)的實現(xiàn)

    MySQL慢查詢?nèi)罩?Slow Query Log)的實現(xiàn)

    慢查詢?nèi)罩居脕碛涗浽?nbsp;MySQL 中執(zhí)行時間超過指定時間的查詢語句,本文就來介紹一下MySQL慢查詢?nèi)罩?nbsp;的使用,感興趣的可以了解一下
    2024-08-08
  • mysql問題之slow log中出現(xiàn)大量的binlog dump記錄的解決方法

    mysql問題之slow log中出現(xiàn)大量的binlog dump記錄的解決方法

    今天在查看mysql中發(fā)現(xiàn)比較慢,然后我使用了slow log,發(fā)現(xiàn)出現(xiàn)了大量的binlog dump記錄,下面我來給大家整理一下這個問題的解決辦法
    2013-09-09
  • 教你如何在Mac上安裝mysql數(shù)據(jù)庫

    教你如何在Mac上安裝mysql數(shù)據(jù)庫

    本文給大家詳細介紹了如何在Mac上安裝mysql數(shù)據(jù)庫的方法,非常的細致,有需要的小伙伴可以參考下
    2018-05-05
  • MySQL中常用的一些日期和時間函數(shù)

    MySQL中常用的一些日期和時間函數(shù)

    MySQL日期和時間函數(shù)是MySQL中的一個重要組件,它提供了一些有用的函數(shù)來處理日期和時間數(shù)據(jù),這篇文章主要給大家介紹了關于MySQL中常用的一些日期和時間函數(shù),文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • MySQL定時刪除XX天數(shù)據(jù)示例代碼

    MySQL定時刪除XX天數(shù)據(jù)示例代碼

    通過使用MySQL的事件調(diào)度器,我們可以方便地創(chuàng)建定時任務來定期清理數(shù)據(jù)庫中的過期數(shù)據(jù),本文介紹了如何創(chuàng)建定時任務以及如何刪除3個月前的數(shù)據(jù)作為示例,感興趣的朋友跟隨小編一起看看吧
    2023-09-09
  • windows下重置mysql的root密碼方法介紹

    windows下重置mysql的root密碼方法介紹

    這篇文章主要介紹了windows下重置mysql的root密碼方法介紹,具有一定參考價值,需要的朋友可以了解下。
    2017-12-12
  • Linux下MySql 1036 錯誤碼解決(1036: Table ''xxxx'' is read only)

    Linux下MySql 1036 錯誤碼解決(1036: Table ''xxxx'' is read only)

    我們在進行數(shù)據(jù)庫搬家的時候,經(jīng)常會遇到(1036: Table 'xxxx' is read only)的問題,字面意思很明確,就是數(shù)據(jù)庫只有讀權限,無寫權限,那么我們來分享下我的處理辦法
    2014-07-07

最新評論

古田县| 韩城市| 巴青县| 江川县| 霍山县| 大荔县| 兴安盟| 沧州市| 桂东县| 乃东县| 富源县| 伊宁市| 平泉县| 通化县| 台中县| 甘谷县| 淮安市| 鄢陵县| 万盛区| 东平县| 宾阳县| 乐山市| 东明县| 喀喇沁旗| 商洛市| 尼玛县| 云安县| 新乐市| 甘德县| 仙居县| 巴马| 海口市| 富裕县| 措勤县| 静安区| 普兰县| 宿迁市| 合山市| 芮城县| 德兴市| 台北市|