您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 模板/表格 > 游标的使用(基于cursor的fetch的删除和更新)
游标的使用PL/SQL语言通过游标提供了对一个结果集进行逐行处理的能力。游标可视作一种特殊的指针。游标的表现形式类似于一些编程语言中的文件名,程序像打开文件访问文件内容一样打开游标获得对查询结果的访问权。游标的使用:1、声明游标(DECLAREcursor_nameCURSORFOR+SELECT语句/DECLARECURSORcursor_nameISSELECT语句)2、打开游标(OPENcursor_name)3、读取数据(FETCHcursor_nameINTOvariable_name)4、关闭游标(CLOSEcursor_name)游标使用实例CreateProcPr_DeleteTableasDeclare@Tablevarchar(20)Declarecr_cursorcursorforselectnamefromdbo.sysobjectswherextype=‘U’andstate0Opencr_cursorFetchcr_cursorinto@Tablewhile@@fetch_state=0beginprint@TableFetchnextcr_cursorinto@Tableend;Closecr_cursorFetch语句Fetchcursor_nameinto+变量名Fetch语句检索查询结果的一条记录给应用程序使用,在fetch语句中命名的游标确定使用查询结果中的哪一条记录。Fetch语句取出数据项目记录放到一个变量列表中,列表中变量的数量必须与查询结果中字段的数量相同Fetch语句将按照以下规则在查询结果中逐记录移动游标:1、open语句将游标放置到查询结果的第一条记录前面,这种状态下,游标没有当前记录。2、如果有下一条有效的查询结果记录的话,fetch语句将游标向前移动到该位置。这个记录将成为游标的当前记录。3、如果一条fetch语句将游标向前移动到超过查询结果最后一条记录的位置,该语句会返回notfound警告,这种状态下,游标没有当前记录。4、close语句结束对查询结果的访问,将游标设置于一种关闭的状态。游标的使用查询出来的数据集做循环使用。(比如把表中某一字段的值select出来,循环相加或链接)idTest1春花秋月何时了2往事知多少3小楼昨夜又东风4故国不堪回首月明中查询test列,查询的值累加可用存储过程加游标实现cursor实现:…@p1int…Declare@ttvarchar(100);Declare@bbvarchar(10);Set@tt=‘’Set@bb=‘’Declaremycurcursorforselectmenofromtestwheregid=@p1OpenmycurFetchmycurinto@bbwhile@@FETCH_STATUS=0BEGINSet@tt=@tt+@bbFetchnextmycurinto@bbEnd;ClosemycurSelect@tt基于cursor的删除和更新应用程序经常采用游标以允许用户逐记录浏览表中的数据。游标的作用是一个指示当前查询结果记录的指针。更新或删除某个记录,记录并不是被平常的SQL搜索识别出的,而是程序使用游标作为指针来指出哪一条记录将要被更新或删除。基于游标的更新UPDATEtable_nameSET字段名=表达式WHERECURRENTOFcursor_nameUPDATE可更新表中的某个单独的记录,被更新的记录是引用表的游标的当前记录,为了处理该语句,SQL会找到与游标当前记录对应的表的记录,并更新在SET子句中的记录。在记录更新后,它继续作为游标的当前记录。UPDATE或DELETE语句中的WHERECURRENTOF子串专门处理要执行UPDATE或DELETE操作的表中取出的最近的数据。基于游标的删除DELETEFROMcursor_nameWHERECURRENTOFcursor_nameDELETE可删除表中的某条单独的记录,被删除的记录是引用表的游标的当前记录,为了处理该语句,SQL会找到与游标当前记录对应的表的记录,并从表中删除该记录。记录被删除后,游标就没有当前记录了,此时,游标被定位再删除记录留下的空白空间中,等待后续的FETCH语句调动它前进到下一记录。基于游标的更新和删除…Fetchcr_cursorintov_name…Ifv_name=‘电子图书’thenUpdatecommunitytypecSetc.english_name=‘ebook’wherecurrentofcr_cursor;Endif;…使用游标删除数据,同上,只要将更新语句换成删除语句即可。注意:1、在提取了游标数据后,为了更新或删除当前游标行数据,必须在update或delete语句中引用wherecurrentof子句。2、与游标结合再一起的查询必须从一个单独的源表中提取数据。3、查询不能制定orderby子句,游标禁止识别分类的查询结果。4、查询不能制定distinct关键字。5、查询不能包括groupby或having子句。
本文标题:游标的使用(基于cursor的fetch的删除和更新)
链接地址:https://www.777doc.com/doc-2288346 .html