本文实例讲述了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
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
+----------+-----------+-----------+-----------+| @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数据库计有所帮助。

更多相关文章

  1. MySQL系列多表连接查询92及99语法示例详解教程
  2. python list.sort()根据多个关键字排序的方法实现
  3. Andorid Dialog 示例【慢慢更新】
  4. android 当系统存在多个Launcher时,如何设置开机自动进入默认的La
  5. Android(安卓)PureMVC
  6. Ubunu下搭建android NDK环境
  7. 自定义SeekBar主题
  8. android SQLite数据库基本操作示例
  9. android draw bitmap 示例代码

随机推荐

  1. .Net Core配置与自动更新的实现方法_实用
  2. C#中.NET框架的简介
  3. Razor TagHelper实现Markdown转HTML的方
  4. C#开发之微信小程序发送模板消息功能
  5. 在.NET Core类库中使用EF Core迁移数据库
  6. C#对Word文档的创建、插入表格、设置样式
  7. Asp.NET控制文件上传的大小方法(超简单)_
  8. c++如何获取数值极值的办法
  9. ADO调用分页查询存储过程的实例讲解_实用
  10. 关于c++中的引用总结