欢迎来到天天文库
浏览记录
ID:38411053
大小:267.00 KB
页数:26页
时间:2019-06-12
《数据库系统13--SQL Server 编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第13讲SQLServer编程一、游标1游标概述2创建和使用游标3定位、更新和删除游标数据二、自定义函数1自定义函数概述2使用和管理自定义函数一、游标1游标概述在数据库应用程序的开发过程中,常常会遇到这种情况:即要对某一结果集中的数据逐行地进行操作,而一般的SQL语句往往同时对某个集合中的所有数据行操作,不能满足上述的要求.因此必须要借助SQLServer所提供的“游标”来进行面向单条记录的数据处理,它为我们提供了一种优秀的解决方案.当写一个应用程序时,基于数据集的操作会有较好的灵活性.例如,要将p
2、ubs数据库中的所有居住在MenloPark的authors的ZIP代码改变为94024,则可以用下面的更新语句来进行.UPDATEauthorsSETZIP=‘94024’WHEREcity=‘MenloPark’要在数据集上进行各种不同的操作,可以用两种方法:一是在数据集上进行多个操作;二是首先得到整个数据集,然后基于它们的值进行所需要的操作,即基于游标的操作.游标操作的最大好处就是可以在一个数据集中,对某个独立于该集的其他数据行进行条件操作,即你可以在单行数据上提交SQL命令.这种处理在复杂的
3、应用程序中有如下好处:●提高性能:因为基于数据集的操作比基于游标的操作需要更多的系统资源.●更好的事物控制能力:当处理数据时,可以控制任何独立于其他行的给定行.●提高效率:在一个大的数据集上进行很多操作时(如调用存储过程),则数据库逐行处理数据的效率高于在整个数据集上逐个操作每个任务,因为数据是保留在内存缓冲区中的.游标提供了一种对从表中检索出的数据进行操作的灵活手段,就其本质而言,游标实际上就是一个指针,它能识别一个集合内的指定工作行.游标总是与一条SQL语句相关联的,这是因为它是由结果集和结果集
4、中指向特定记录的游标位置所组成的.如果要对一个结果集进行处理,那么必须要首先声明一个指向该结果集的游标.游标允许应用程序对查询语句SELECT返回的行结果中的每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供了针对游标位置而对表中的数据进行删除和更新的能力;而且,它还把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式得以沟通.使用SQLServer游标通常有下面的5种状态.●DECLARE:对于用于查询的游标,SQLServer首先要使它有效,即
5、在共享的存储器中创建一个游标定义的结构.●OPEN:提取游标标识的.●FETCH:从游标返回数据,这时可以进行任何需要的操作.●CLOSE:关闭先前打开的游标,释放游标结果占据的锁.●DEALLOCATE:释放DECLARE语句所使用的共享存储器,而不再允许其他过程打开这个游标.2创建和使用游标如果要在应用程序中使用游标,需要进行一下步骤.(1)声明游标.(2)打开游标,提取数据.(3)在游标的当前行进行各种操作(插入、更新、删除).(4)关闭、释放游标.●声明和打开游标例:声明一个只读游标从pub
6、s数据库的employee表中读取数据.DECLAREcur_employee_readonlyCURSORFORSELECTemp_id,lname,job_id,pub_idFROMemployeeORDERBYemp_idFORREADONLY例:声明一个游标从pubs数据库的employee表中提取数据.DECLAREcur_employee_scrollSCROLLCURSORFORSELECTemp_id,lname,job_id,pub_idFROMemployeeORDERBYemp
7、_id有了SCROLL关键字,就可以在应用中对行位置进行定位.例:声明一个更新游标从pubs数据库的employee表中读取数据.DECLAREcur_employee_updateSCROLLCURSORFORSELECTemp_id,lname,job_id,pub_idFROMemployeeORDERBYemp_idFORUPDATEOPENcur_employee_update例:创建一个游标选择工作号在1和10之间的雇员的姓名并提取游标.DECLAREcur_emp_nameSCROLL
8、CURSORFORSELECTLastName,FirstName,EmployeeIDFROMemployeesWHEREEmployeeIDBETWEEN1AND10/*打开游标*/OPENcur_emp_name/*提取游标*/FETCHFROMcur_emp_name对于游标的提取,可以采用一些关键字来确定所需要的行.●NEXT:返回结果集中当前行的下一行.●PRIOR:若使用了关键字SCROLL,则返回结果集中当前行的前一行.●FIRST、LAST:返回结果
此文档下载收益归作者所有