游标

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2020年1月29日1时27分数据库系统原理1游标知识补充2020年1月29日1时27分数据库系统原理2使用游标的SQL语句必须使用游标的SQL语句查询结果为多条记录的SELECT语句CURRENT形式的UPDATE语句CURRENT形式的DELETE语句2020年1月29日1时27分数据库系统原理3一、查询结果为多条记录的SELECT语句使用游标的步骤1.说明游标2.打开游标3.移动游标指针,然后取当前记录4.关闭游标2020年1月29日1时27分数据库系统原理41.说明游标使用DECLARE语句语句格式EXECSQLDECLARE游标名CURSORFORSELECT语句;功能是一条说明性语句,这时DBMS并不立即执行SELECT指定的查询操作。2020年1月29日1时27分数据库系统原理52.打开游标使用OPEN语句语句格式EXECSQLOPEN游标名;功能打开游标实际上是执行相应的SELECT语句,把所有满足查询条件的记录从指定表取到缓冲区中这时游标处于活动状态,指针指向查询结果集中第一条记录之前2020年1月29日1时27分数据库系统原理63.移动游标指针,然后取当前记录使用FETCH语句语句格式EXECSQLFETCH[[NEXT|PRIOR|FIRST|LAST]FROM]游标名INTO主变量[指示变量][,主变量[指示变量]]...;2020年1月29日1时27分数据库系统原理7移动游标指针,然后取当前记录(续)功能指定方向推动游标指针,然后将缓冲区中的当前记录取出来送至主变量供主语言进一步处理。NEXT|PRIOR|FIRST|LAST:指定推动游标指针的方式。NEXT:向前推进一条记录PRIOR:向回退一条记录FIRST:推向第一条记录LAST:推向最后一条记录缺省值为NEXT2020年1月29日1时27分数据库系统原理8移动游标指针,然后取当前记录(续)说明(1)主变量必须与SELECT语句中的目标列表达式具有一一对应关系(2)FETCH语句通常用在一个循环结构中,通过循环执行FETCH语句逐条取出结果集中的行进行处理(3)为进一步方便用户处理数据,现在一些关系数据库管理系统对FETCH语句做了扩充,允许用户向任意方向以任意步长移动游标指针2020年1月29日1时27分数据库系统原理94.关闭游标使用CLOSE语句语句格式EXECSQLCLOSE游标名;功能关闭游标,释放结果集占用的缓冲区及其他资源说明游标被关闭后,就不再和原来的查询结果集相联系被关闭的游标可以再次被打开,与新的查询结果相联系2020年1月29日1时27分数据库系统原理10例题例1查询某个系全体学生的信息(学号、姓名、性别和年龄)。要查询的系名由用户在程序运行过程中指定,放在主变量deptname中............EXECSQLINCLUDESQLCA;EXECSQLBEGINDECLARESECTION;....../*说明主变量deptname,HSno,HSname,HSsex,HSage等*/......EXECSQLENDDECLARESECTION;............gets(deptname);/*为主变量deptname赋值*/......2020年1月29日1时27分数据库系统原理11例题(续)EXECSQLDECLARESXCURSORFORSELECTSno,Sname,Ssex,SageFROMStudentWHERESDept=:deptname;/*说明游标*/EXECSQLOPENSX/*打开游标*/WHILE(1)/*用循环结构逐条处理结果集中的记录*/{EXECSQLFETCHSXINTO:HSno,:HSname,:HSsex,:HSage;/*将游标指针向前推进一行,然后从结果集中取当前行,送相应主变量*/2020年1月29日1时27分数据库系统原理12例题(续)if(sqlca.sqlcodeSUCCESS)break;/*若所有查询结果均已处理完或出现SQL语句错误,则退出循环*//*由主语言语句进行进一步处理*/............};EXECSQLCLOSESX;/*关闭游标*/............2020年1月29日1时27分数据库系统原理13例题(续)例2查询某些系全体学生的信息。............EXECSQLINCLUDESQLCA;EXECSQLBEGINDECLARESECTION;....../*说明主变量deptname,HSno,HSname,HSsex,HSage等*/............EXECSQLENDDECLARESECTION;2020年1月29日1时27分数据库系统原理14例题(续)......EXECSQLDECLARESXCURSORFORSELECTSno,Sname,Ssex,SageFROMStudentWHERESDept=:deptname;/*说明游标*/WHILE(gets(deptname)!=NULL)/*接收主变量deptname的值*/{/*下面开始处理deptname指定系的学生信息,每次循环中deptname可具有不同的值*/EXECSQLOPENSX/*打开游标*/2020年1月29日1时27分数据库系统原理15例题(续)WHILE(1){/*用循环结构逐条处理结果集中的记录*/EXECSQLFETCHSXINTO:HSno,:HSname,:HSsex,:HSage;/*将游标指针向前推进一行,然后从结果集中取当前行,送相应主变量*/if(sqlca.sqlcodeSUCCESS)break;/*若所有查询结果均已处理完或出现SQL语句错误,则退出循环*//*由主语言语句进行进一步处理*/......};/*内循环结束*/EXECSQLCLOSESX;/*关闭游标*/};/*外循环结束*/......2020年1月29日1时27分数据库系统原理16二、CURRENT形式的UPDATE语句和DELETE语句非CURRENT形式的UPDATE语句和DELETE语句面向集合的操作一次修改或删除所有满足条件的记录CURRENT形式的UPDATE语句和DELETE语句的用途如果只想修改或删除其中某个记录用带游标的SELECT语句查出所有满足条件的记录从中进一步找出要修改或删除的记录用CURRENT形式的UPDATE语句和DELETE语句修改或删除之2020年1月29日1时27分数据库系统原理17CURRENT形式的UPDATE语句和DELETE语句(续)步骤(1)DECLARE说明游标(2)OPEN打开游标,把所有满足查询条件的记录从指定表取至缓冲区(3)FETCH推进游标指针,并把当前记录从缓冲区中取出来送至主变量(4)检查该记录是否是要修改或删除的记录,是则处理之(5)重复第(3)和(4)步,用逐条取出结果集中的行进行判断和处理(6)CLOSE关闭游标,释放结果集占用的缓冲区和其他资源2020年1月29日1时27分数据库系统原理18CURRENT形式的UPDATE语句和DELETE语句(续)说明游标为UPDATE语句说明游标使用带FORUPDATEOF列名短语的DECLARE语句语句格式EXECSQLDECLARE游标名CURSORFORSELECT语句FORUPDATEOF列名;FORUPDATEOF列名短语用于指明检索出的数据在指定列上是可修改的,以便DBMS进行并发控制2020年1月29日1时27分数据库系统原理19CURRENT形式的UPDATE语句和DELETE语句(续)为DELETE语句说明游标使用带FORDELETE短语的DECLARE语句语句格式EXECSQLDECLARE游标名CURSORFORSELECT语句FORDELETE;FORDELETE短语提示DBMS进行并发控制2020年1月29日1时27分数据库系统原理20CURRENT形式的UPDATE语句和DELETE语句(续)修改或删除当前记录经检查缓冲区中记录是要修改或删除的记录,则用UPDATE语句或DELETE语句修改或删除该记录语句格式UPDATE语句WHERECURRENTOF游标名DELETE语句WHERECURRENTOF游标名WHERECURRENTOF游标名子句表示修改或删除的是该游标中最近一次取出的记录2020年1月29日1时27分数据库系统原理21CURRENT形式的UPDATE语句和DELETE语句(续)当游标定义中的SELECT语句带有UNION或ORDERBY子句时,或者该SELECT语句相当于定义了一个不可更新的视图时,不能使用CURRENT形式的UPDATE语句和DELETE语句2020年1月29日1时27分数据库系统原理22例题例3对某个系的学生信息,根据用户的要求修改其中某些人的年龄字段。思路查询某个系全体学生的信息(要查询的系名由主变量deptname指定)然后根据用户的要求修改其中某些记录的年龄字段2020年1月29日1时27分数据库系统原理23例题(续)............EXECSQLINCLUDESQLCA;EXECSQLBEGINDECLARESECTION;....../*说明主变量deptname,HSno,HSname,HSsex,HSage,NEWAge等*/............EXECSQLENDDECLARESECTION;............gets(deptname);/*为主变量deptname赋值*/......2020年1月29日1时27分数据库系统原理24例题(续)EXECSQLDECLARESXCURSORFORSELECTSno,Sname,Ssex,SageFROMStudentWHERESDept=:deptnameFORUPDATEOFSage;/*说明游标*/EXECSQLOPENSX/*打开游标*/WHILE(1){/*用循环结构逐条处理结果集中的记录*/EXECSQLFETCHSXINTO:HSno,:HSname,:HSsex,:HSage;/*将游标指针向前推进一行,然后从结果集中取当前行,送相应主变量*/2020年1月29日1时27分数据库系统原理25例题(续)if(sqlca.sqlcodeSUCCESS)break;/*若所有查询结果均已处理完或出现SQL语句错误,则退出循环*/printf(%s,%s,%s,%d,Sno,Sname,Ssex,Sage);/*显示该记录*/printf(UPDATEAGE?);/*问用户是否要修改*/scanf(%c,&yn);2020年1月29日1时27分数据库系统原理26例题(续)if(yn='y'oryn='Y')/*需要修改*/{printf(INPUTNEWAGE:);scanf(%d,&NEWAge);/*输入新的年龄值*/EXECSQLUPDATEStudentSETSage=:NEWAgeWHERECURRENTOFSX;/*修改当前记录的年龄字段*/};......};EXECSQLCLOSESX;/*关闭游标*/......2020年1月29日1时27分数据库系统原理27例题(续)例4对某个系的学生信息,根据用户的要求删除其中某些人的记录。............EXECSQLINCLUDESQLCA;EXECSQLBEGINDECLARESECTION;....../*说明主变量deptname,HSno,HSname,HSsex,HSage等*/......EXECSQLENDDECLARESECTION;............gets(deptname);/*为主变量deptname赋值*/....

1 / 41
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功