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存储过程之返回多个值的方法示例相关推荐
- mysql以下日期函数正确的_[数据库]MYSQL基础03(日期函数)
[数据库]MYSQL基础03(日期函数) 0 2015-10-29 01:00:09 工作中对日期的处理是经常遇到的,需求可能多种多样,因此重点介绍. 1.获取当前日期select NOW()-- 结 ...
- mysql查出倒序第一条数据_[数据库]mysql 记录根据日期字段倒序输出
[数据库]mysql 记录根据日期字段倒序输出 0 2016-07-21 11:00:17 我们知道倒序输出是很简单的 select * from table order by id desc 直接这 ...
- mysql交叉表的构造知识_[数据库]MySQL交叉表
[数据库]MySQL交叉表 0 2012-01-11 17:00:23 在某些数据库中有交叉表,但在MySQL中却没有这个功能,但网上看到有不少朋友想找出一个解决方法,特发贴集思广义. http:// ...
- mysql怎么将成绩划分等级_数据库mysql中case如何给成绩划分等级?
在表格中如果我们要给不同分段的成绩评选等级,只需要使用筛选功能输入评定的条件即可.那么在mysql中我们该如何输出跟表格一样结果呢?这里有的小伙伴说可以用我们刚学习的case函数来尝试.但是作为最基础 ...
- mysql的on和in用法_数据库中in、on、with的用法及示例。
with用法: 创建一个表: create table regr (pid integer,id integer, name char(20)) alter table regr alter id s ...
- mysql清空数据库所有表的命令_mysql清空表数据命令是什么?_数据库,mysql,清空表数据...
mysql服务无法启动怎么解决_数据库 mysql服务无法启动的解决方法是:1.配置环境变量:2.在mysql安装目录下,新建my.ini文件,设置默认字符集.端口.存储引擎等:3.执行[mysqld ...
- mysql权限层级体系_数据库mysql有哪些权限?层级有哪些?
我们想要运行一个文件时,有时候会出现只有管理员才能打开这类软件,这就是权限对于用户的限制.那么在我们最近学习的数据库mysql中,也有这样的权限需要我们去注意吗?小编想说当然有,而且还不少!今天就数据 ...
- dapper 调用 存储过程返回值_数据库事务、存储过程、函数以及触发器之间的区别和联系...
一.[事务概念] 事务(Transaction)是指构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行. 1,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前 ...
- mysql存储过程出参和入参_数据库mysql存储中的入参出参理解
在使用语句的时候,不可避免的要考虑参数的问题,而参数又是用来辅助变量的.有些小伙伴看到我们标题中的入参形参不知道是什么意思,其实也不难理解.我们把出参和入参看成输入和输出的意思就可以了.想必这样说大家 ...
最新文章
- github报错“remote: Support for password authentication was removed on August 13, 2021. Please use a p”
- PCB上走100A电流的方法
- VC内存泄露检查工具:Visual Leak Detector
- fragment 调用activity方法,如dispatchKeyEvent,dispatchTouchEvent
- 安装redis,执行make test时遇到You need tcl 8.5 or newer in order to run the Redis test
- Linux驱动(11)--生成设备节点
- MDF文件在SQL Server数据库中恢复技术
- python面试题之如何读取大文件
- spark页面单跳转化率
- 计量分析类论文如何创新-化柏林
- CV2.imread得到的图像显示成蓝色的原因和3种BGR转RGB的方法
- libfaac个个参数说明
- window上安装fasttext
- google关键词查询
- 软考中级-嵌入式系统设计师
- HTML小白学习-1.0
- github上很好的iOS资源集锦
- iwatch表盘壁纸图片_iwatch壁纸大全卡西欧表盘app
- NTT(快速数论变换)模板
- 高新技术企业认定条件
热门文章
- 计算机原理与应用简称,基础知识-计算机原理与应用.ppt
- 锁具行业电子工程师岗位职责_赏金猎人招募电子产品开发工程师产品结构工程师...
- yaml报错TypeError: load() missing 1 required positional argument: ‘Loader‘
- android 组合属性动画,Android属性动画组合(sequence串行、together并行)
- excel 复制数据 sql server 粘贴_win32 实现 excel 快速复制粘贴
- java json 解析null_解析包含null的原始json数组
- 8个超震撼的HTML5和纯CSS3动画源码
- javaweb可部署目录结构
- java 里面eaquls和==区别
- asp.net ViewState详解