问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

Cursor游标是什么?有什么作用?

发布网友 发布时间:2022-05-01 05:16

我来回答

4个回答

懂视网 时间:2022-05-01 09:38

游标 cursor 什么是游标?为什么需要游标 使用存储过程对sql进行编程的时候,我们查询的语句可能是数据是多个,它总是一口气全部执行,我们无法针对每一条进行判断。也就是说,我们无法控制程序的运行,所以引入了游标cursor cursor类似于java中的迭代器。 它利用查询语句生成一个游标,然后游标中有一个类似指针的东西。首先指在游标首,就是迭代器。不解释了 cursor 游标 declare声明; declare 游标名 cursor for select_statement; open 打开; open游标名 fetch 取值; fetch 游标名 into var1,var2[,...] select语句中查出的项有多少,就需要使用多少变量接受 close 关闭; close 游标名 */ create table goods ( id int, name varchar(20), num int ); insert into goods values (1,‘dog‘,20),(2,‘cat‘,30),(3,‘pig‘,25); select * from goods; -- 游标在存储过程中使用 drop procedure p1; create procedure p1() begin declare row_id int; declare row_name varchar(20); declare row_num int; declare gs cursor for select id,name,num from goods; -- 声明游标的语句后面不能有声明变量 open gs; fetch gs into row_id,row_name,row_num; select row_id,row_name,row_num; close gs; end; call p1(); create procedure p2() begin declare row_id int; declare row_name varchar(20); declare row_num int; declare gs cursor for select id,name,num from goods; -- 声明游标的语句后面不能有声明变量 open gs; fetch gs into row_id,row_name,row_num; fetch gs into row_id,row_name,row_num; fetch gs into row_id,row_name,row_num; select row_id,row_name,row_num; close gs; end; call p2(); --报错,如果取出游标数据的个数超过游标中数据的个数,报错。类似于数组越界 drop procedure p3; create procedure p3() begin declare row_id int; declare row_name varchar(20); declare row_num int; declare gs cursor for select id,name,num from goods; -- 声明游标的语句后面不能有声明变量 open gs; fetch gs into row_id,row_name,row_num; select row_id,row_name,row_num; fetch gs into row_id,row_name,row_num; select row_id,row_name,row_num; fetch gs into row_id,row_name,row_num; select row_id,row_name,row_num; close gs; end; call p3(); --学会使用循环控制试试 create procedure p4() begin declare row_id int; declare row_name varchar(20); declare row_num int; declare count_r int; declare i int default 0; declare gs cursor for select id,name,num from goods; -- 游标声明语句好像位置有限定。不能在声明变量前面,不能再哎select语句后面 select count(*) into count_r from goods; open gs; repeat fetch gs into row_id,row_name,row_num; select row_id,row_name,row_num; set i := i+1; until i>=count_r end repeat; close gs; end; call p4(); -- 用while循环试试 create procedure p5() begin declare row_id int; declare row_name varchar(20); declare row_num int; declare count_r int; declare i int default 0; declare gs cursor for select id,name,num from goods; -- 游标声明语句好像位置有限定。不能在声明变量前面,不能再哎select语句后面 select count(*) into count_r from goods; open gs; while i<count_r do fetch gs into row_id,row_name,row_num; select row_id,row_name,row_num; set i := i+1; end while; close gs; end; call p5(); -- 使用游标最主要的是可以针对每一次查出来的结果进行一些操作 drop procedure p6; create procedure p6() begin declare row_id int; declare row_name varchar(20); declare row_num int; declare count_r int; declare i int default 0; declare gs cursor for select id,name,num from goods; -- 游标声明语句好像位置有限定。不能在声明变量前面,不能再哎select语句后面 select count(*) into count_r from goods; open gs; while i<count_r do fetch gs into row_id,row_name,row_num; if row_num>25 then select concat(row_name,‘比较多‘); elseif row_num=25 then select concat(row_name,‘刚刚好‘); else select concat(row_name,‘有点少‘); end if; set i := i+1; end while; close gs; end; call p6(); -- 第三种方式:游标越界时候使用标志,利用标识来结束 -- 在mysql cursor中,可以使用declare continue handler来操作一个越界标识 -- declare continue handler for not found statement; drop procedure p7; create procedure p7() begin declare row_id int; declare row_name varchar(20); declare row_num int; declare you int default 1; declare gs cursor for select id,name,num from goods; declare continue handler for not found set you:=0; open gs; while you!=0 do fetch gs into row_id,row_name,row_num; if you!=0 then select row_num,row_name; end if; end while; close gs; end; call p7();

 

cursor游标(mysql)

标签:

热心网友 时间:2022-05-01 06:46

在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用C语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。我们知道关系数据库管理系统实质是面向集合的,在MS SQL SERVER中并没有一种描述表中单一记录的表达形式,除非使用where子句来*只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。由此可见,游标允许应用程序对查询语句select返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。在数据库开发过程中,当你检索的数据只是一条记录时,你所编写的事务语句代码往往使用SELECT INSERT语句。但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录。那么如何解决这种问题呢?游标为我们提供了一种极为优秀的解决方案——那就是使用游标。

热心网友 时间:2022-05-01 08:04

游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字。用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。主语言是面向记录的,一组主变量一次只能存放一条记录。仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求。嵌入式SQL引入了游标的概念,用来协调这两种不同的处理方式。在数据库开发过程中,当你检索的数据只是一条记录时,你所编写的事务语句代码往往使用SELECT INSERT语句。但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录。那么如何解决这种问题呢?这时我们就会使用游标。

热心网友 时间:2022-05-01 09:38

我的理解:游标作用,其实和循环差不多,就是你把数据放在游标里面,然后使用游标一行一行的取得数据。最终达到循环处理数据的目的。比如(鉴于你不是很理解,就给你弄个最简单的吧)--创建一个游标cursor cur1 isselect*from table where group by..begin--遍历游标其中rec是游标的当前行数据forrec in cur_1 loop--根据rec数据更新一个updatetabel.set row1=rec.rown,row2=rec.row2where id=rec.id--结束循环and loopcommit;end;以上就是循环更新一个表例子就不给你复杂的了。希望能帮到楼主。建议楼主可以看看他的语法,然后亲自写一个小例子,我决定这样理解的更深入一些。

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
婚礼摄影师和摄像师怎么选 拍摄剪辑师岗位职责 摄像师和摄影师的区别是什么。都主要怎么工作。主要经济来源是什么_百 ... 短视频摄影师岗位职责 手机上能发布淘宝商品吗 手机端怎么发布宝贝? 怎么将浏览器设置为兼容模式浏览器兼容模式设置技巧 手机浏览器如何调成兼容模式急急急 五谷杂粮馒头是哪几种 五谷杂粮馒头怎么做-五谷杂粮馒头的做法 万能播放器下载安装 万能播放器下载排行 最新万能播放器下载 有没有哪些万能的播放器?可以播放一些现在的播放器看不到的电影的。 不想绑定手机号要怎么解除? 手机号码绑定的怎么解除绑定 用手机注册的怎么解绑手机号? 怎样解除绑定的手机号? 不想绑定手机号要怎么解除? 我妈要去所罗门群岛旅游,出去怎么用手机?怎么收费啊? 所罗门群岛飞机票多少钱,所罗门群岛飞机票预订 – 请问所罗门群岛的交通,方便不方便? 从奥克兰到所罗门群岛有多远,可以乘飞机前往吗 罗门群鸟离中国有多远 所罗门群岛是不是落地签证? 所罗门群岛机票贵不贵? 持中国护照去哪些国家停留时间最长 斐济到所罗门群岛飞机飞几个小时 工商银行股最新股价与走势?工商银行股份股票分析?股票工商银行上市的价格是多少? 为什么银行股都很便宜 银行股为什么这么好的效益,却价格这么低? 快手极速版邀请任务两个都是自己的可以分别绑定两个身份证提现吗? e71万能播放器有哪些啊?好用的呢? 来给我推荐一款万能播放器 有哪些好用的全能播放器?最好能播放FLV的 诺基亚N85的万能播放器都有哪些? 手机怎么样下载万能播放器 韩国万能播放器下载 万能播放器下载华军 最好的万能播放器下载 做梦梦到被绿是什么意思? 首汽约车先付款,取消打车退款么 首汽约车司机怎么无责 取消预约单? 首汽约车开通了微信零钱免密支付而且是优先支付!为什么叫车的时候还是显示余额不足??? 首汽客户怎么取消订单 mysql的存储过程怎么定义一个游标 乡镇卫生院在编年度考核后有什么用 小视屏好看的呢? 乡镇卫生院绩效考核细则 梦到两只大海龟死在楼顶,还有好多苍蝇 梦到一只大海龟,我们都去摸他。我们摸的时候还好好的,有一个人摸的时候,海龟突然变得很凶,睁大眼睛锋 梦到一个大海龟、由于我想把它带回家、培训老师说必须杀它、所以就把海龟的头给剁了、 梦见田地里有很多死的和快死的大海龟 做梦梦到大海龟在陆地上攻击我?
  • 焦点

最新推荐

猜你喜欢

热门推荐