mysql游标10取1_【MySQL10】游标

数据库中,对数据的处理分为两种方式:

一种是基于数据行集合的整体处理方式,直接使用select、update、delete等语句来操作(select语句直接查询某一整列);

一种是逐行处理数据行的方式,游标就是这种数据访问机制,允许用户一次访问单个数据行,而非整个数据行集(游标在某一列中进行一行一行查询)。

一、创建数据表mysql> select * from person;

+----+------+------+------+-----------+| id | name | sex | age | addr |

+----+------+------+------+-----------+| 1 | Jone | fema | 27 | xianggang |

| 2 | Lily | fema | 25 | taiwan |

| 3 | Bobe | male | 25 | ximan || 4 | Kity | fama | 20 | beijing |

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

查询person数据表中的addr列,使得结果以这种形式输出:

xianggang;taiwan;ximan;beijing;

二、查询

方式1:drop procedure if exists useCursor ;delimiter //CREATE PROCEDURE useCursor() # 创建一个存储过程 BEGIN

DECLARE oneAddr varchar(20) default '';

# 定义一个变量oneAddr

DECLARE allAddr varchar(80) default '';

# 定义一个变量allAddr

DECLARE curl CURSOR FOR SELECT addr FROM person.person; # 定义一个游标curl

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET oneAddr = null;

# 如果没有数据返回,就将变量oneAddr设置为null

# 也可以这么写

# DECLARE CONTINUE HANDLER FOR NOT FOUND SET oneAddr = null;

OPEN curl; # 打开游标

FETCH curl INTO oneAddr;

# 通过游标读取数据 WHILE(oneAddr is not null) DO

# 使用 while...do 循环来遍历 addr 列

set oneAddr = CONCAT(oneAddr, ';');

set allAddr = CONCAT(allAddr, oneAddr);

FETCH curl into oneAddr; END WHILE;

CLOSE curl; # 关闭游标 SELECT allAddr;

END;//call useCursor();

方式2:drop procedure if exists useCursor;delimiter //CREATE PROCEDURE useCursor()

BEGIN

DECLARE oneAddr varchar(20) default '';

DECLARE allAddr varchar(80) default '';

DECLARE done INT DEFAULT 0; # 定义一个默认值0

DECLARE curl CURSOR FOR SELECT addr FROM person.person;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN curl; REPEAT # 使用repeat循环来遍历addr列

FETCH curl INTO oneAddr; IF NOT done THEN

set oneAddr = CONCAT(oneAddr, ';');

set allAddr = CONCAT(allAddr, oneAddr); END IF; UNTIL done END REPEAT; #直到为0才结束循环

CLOSE curl; select allAddr; END;//call useCursor();

方式3:drop procedure if exists useCursor;delimiter //CREATE PROCEDURE useCursor()

BEGIN

DECLARE oneAddr varchar(20) default '';

DECLARE allAddr varchar(80) default '';

DECLARE done bool DEFAULT false; # 定义布尔变量,默认值为false

DECLARE curl CURSOR FOR SELECT addr FROM person.person;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;

OPEN curl;

personLoop: LOOP #使用loop循环来遍历addr列

FETCH curl INTO oneAddr; IF done THEN

LEAVE personLoop; ELSE

set oneAddr = CONCAT(oneAddr, ';');

set allAddr = CONCAT(allAddr, oneAddr); END IF; END LOOP personLoop;

CLOSE curl; select allAddr; END;//call useCursor();

三、输出结果mysql> call useCursor();//

+---------------------------------+| allAddr |

+---------------------------------+| xianggang;taiwan;ximan;beijing; |

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

以上就是 【MySQL 10】游标的内容,更多相关内容请关注PHP中文网(www.gxlcms.com)!

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值