本质上一种能从select结果集中每次提取一条记录的机制,因此游标与select语句有绑定关系;游标的作用是处理多行结果集;
使用步骤:
declare 游标名 cursor for select语句;
使用declare语句声明游标时,此时与该游标对应的select语句并没有执行,MySQL服务器内并不存在于select对应的结果集;
(相关资料图)
open 游标名;
使用open语句打开游标后,与该游标对应的select语句被执行,MySQL服务器内存中存放于select语句对应的结果集;
fetch 游标名 into 变量1,变量2,...;
变量的个数必须与声明游标时使用的select语句结果集的字段个数保持一致。每执行一次fetch语句,从结果集中提取一行数据,同时游标向下移动一行;
close 游标名;
关闭游标的作用在于释放游标打开时产生的结果集,从而节省MySQL服务器的内存空间。游标如果没有被明确关闭,那么它将在被打开的begin-end语句块的末尾关闭;
试想,choose表中,记录了所有的学生的成绩和对应的课程;若老师发现一门课程总体成绩不满意,需要进行处理:选择该课程的每个学生的分数,先都加五分,之后将超过100的设置为100,在55~60之间的设置为60,从而提高通过率;我们自然想到用一个 procedure 处理;
先将select语句筛选出,选择该课程的学生,得到学号和成绩的结果集;之后利用游标的特性,循环处理每一行数据,并进行更新;
游标循环执行到最后发现没有数据了,会报出not found 的触发条件的错误,因此我们利用一个局部变量state设计一个错误处理程序:捕获这个not found,设置这个局部变量为error;
既然要循环处理,那么选择循环的方式:因为每次要先执行fetch语句,然后才判断条件,因此舍弃while(先判断);最后我们为了配合错误处理程序,需要将结束循环条件放到 紧跟 fetch语句块后,判断state状态,判断是否没有数据了;因此我们选择loop循环;而do until是在最后判断状态;
声明变量的顺序:先声明局部变量,再声明游标;接着声明错误处理;
t综合代码如下:
-- 使用步骤:delimiter $$create procedure update_score_proc(in c_no int)begin-- 声明局部变量 declare stu_n char(11); declare grade int; declare state char(10);-- 1、声明游标 declare score_cur cursor for select student_no,score from choose where c_no=course_no;-- 捕获错误 declare continue handler for not found begin set state = "error"; end;-- 2、打开游标 open score_cur;-- 3、循环提取并处理数据 update_cur : loop fetch score_cur into stu_n,grade; if state = "error" then leave update_cur; end if; set grade = grade + 5; if grade > 100 then set grade = 100; end if; if grade < 60 and grade >= 55 then set grade = 60; end if; update choose set score=grade where student_no=stu_n and course_no=c_no; end loop update_cur;-- 4、关闭游标 close score_cur;end;$$delimiter ;
测试代码1:
call update_score_proc(1);select * from choose;
测试代码2:
call update_score_proc(2);select * from choose;
标签:
精彩推荐
游标与select结果集:本质上一种能从select结果集中每次提取一条记录的机制,因此游标与select语句有绑定关
电商行业的618年中大促已经开始,首当其冲的是快手于5月18日启动了预售活动,随后京东于5月23日开始javascr
蟑螂、螳螂、甲虫……你有过被“小虫子”支配的恐惧吗?然而,这些网友“隔着屏幕都害怕”的虫子,在10...
我们现在去宾馆、一些休闲或是娱乐场所,会发现有很多反诈知识的宣传海报、卡片。今天,我们跟随南京建邺公
1、asmuchaspossible的意思:尽可能发音:英[æzmʌtʃæzˈpɔsəbl]美[æz
中韩贸易结构迎来重大变化(主题)韩国央行5月25日发布的《经济展望更新报告》认为,韩国国内经济增长持续
EasiMotorOnline:提高电机设计效率的神器-EasiMotorOnline是一款大受欢迎的电机设计工具,可以大幅提高电
中新网黑龙江新闻6月1日电(刘璐)为传承红色基因,种下警察梦想,与小朋友们共同度过一个快乐、有意义的...
停息挂账银行要流水干嘛?停息挂账需要的材料有本人的征信报告、再者就是工资的流水,以及还有个人情况说
朱汉民:天下、天下为公及其现代意义
央视网消息:当前,全国小麦正陆续进入集中收获期。农业农村部小麦机收进度显示,全国已收获冬小麦面积3900
今天,比亚迪正式发布了2023款元Pro,新车将推出三款车型,售价区间为9 58-11 38万元。作为比亚迪最便宜的S
互联网的出现可以算是人类文明发展中浓墨重彩的一笔,它为各国的经济发展、科技创新、思想文化交流、新闻信
很多朋友平时都习惯把文件存储在百度网盘里面,不过最近有的朋友发现自己下载文件时百度网盘显示违规内容不
上证报中国证券网讯据中国网消息,中国气象局定于2023年6月2日(星期五)上午10:00召开6月新闻发布会,发
上海320万户经营主体实现“一照一码”
1、长期以来,互联网流量其实是跟着内容走的。最早的时候,内容创作者是Web时代的门户,然后去论坛。移动时
AI概念股震荡走强,同花顺涨超10%,荣信文化、世纪天鸿、科大讯飞、彩讯股份、光云科技涨超5%,万兴科技、
安徽省合肥市深入贯彻落实《长江三角洲区域一体化发展规划纲要》《长三角G60科创走廊建设方案》部署要求,
当地时间5月31日,苏丹民航局发布通告称,将苏丹全境领空的关闭时间延长至6月15日,但人道主义援助和外国公
资讯News
06-20
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
聚焦Policy
当好农民工的“护薪人” 近日,罗某等7名农民工在收到被拖欠的工资后,纷纷打电话向江西省南昌市...
“通讯录里所有人都知道我欠钱了” □ 本报记者 韩丹东 □ 本报见习记者 张守坤 ...
大连宝马车撞人案肇事司机被判死刑 本报讯 记者韩宇 10月29日,辽宁省大连市中级人民法院一审...
医院财务迷上网络赌博输光5000万元公款 □ 本报记者 马维博 □ 本报通讯员 汪宇堂 曹...
辊环车削 雕琢毫厘(工匠绝活) 【绝活看点】 23年来,雷虎始终扎根一线,改进钢材轧制工艺...
交警严查超标电动自行车挪用“白牌” 截至昨晚6时,处罚电动自行车违法行为共计6585笔;下一步将...
明起寒潮来袭 北方气温普降10℃以上 中央气象台预计,本周日北京平原地区最低气温降至-4℃左右...
多种蔬菜价格降幅达五成 包括菠菜、蒿子秆等 预计本月中旬蔬菜恢复供需平衡 本报讯(记者...
北京周日最低气温或达-4℃ 本报讯(记者 赵婷婷)北京青年报记者昨天从中央气象台获悉,新一股...
昌平一家四口确诊新冠肺炎 天通北苑第二社区升级为中风险地区 朝阳两涉疫校区及16所学校停课 ...