设为首页 收藏本站
查看: 1939|回复: 0

[经验分享] SQL存储过程中游标的用法

[复制链接]

尚未签到

发表于 2018-10-24 10:22:42 | 显示全部楼层 |阅读模式
  游标的使用:
  1.declare cursor  定义游标结构并分配资源。
  原型:
  Declate cursor_name [insensitive] [scorll] cursor for select_statement [for { read
  Only | update }[of  column _list]]
  或者:
  Declare cursor_name cursor [local | global] [forward_only | scroll] [static | keyset |dynamic] [read_only | scroll_locks | optimistic] for [select _statement
  [ for {read only | update } [of column_list]]]
  参数说明:
  INSENSITIVE  指明要为检索到的结果集建立一个临时拷贝,以后的数据从这个临时拷贝中获取。原有基表中数据发生了改变,对于游标而言是不可见的。这种不敏感的游标不允许数据更改。
  SCROLL  指明游标可以在任意方向上滚动。忽略该选项,则游标只能向前滚动。
  SELECT_SATAEMENT  指明SQL语句建立的结果集。
  READ ONLY  指明在游标结果集中不允许进行数据更改。
  UPDATE  指明游标结果集可以进行修改。
  OF COLUMN_LIST  指明结果集中可以进行修改的列。缺省时(使用UPDATE关键字),所有的列都可进行修改。
  LOCAL  指明游标是局部的,只能在它所声明的过程中使用。全局的游标在连接激活的任何时候都是可用的。只有池连接结束时,才不再可用。
  GLOBAL 使用游标对于整个连接全局可见。
  FORWARD_ONLY  指明游标只能向前滚动。
  STATIC  与INSENITIVE的游标相同。
  KEYSET  指明选取的行的顺序。
  DYNAMIC  指明游标反映所有对结果集的修改。
  SCROLL_LOCK  对修改或delete加锁。保证游标操作成功。
  OPTIMISTIC  指明哪些通过游标进行的修改或者delete将不会成功。
  例如:
  Use northwind
  Go
  Declare customers_cursor cursor     //定义游标
  For select companyname , address,phone  //选择部分属性
  From customers
  Where city=’london’
  For read only  //只读游标
  Deallocate customers_cursor    //delete游标
  2.deallocate  delete游标定义,释放资源。
  3.open  打开游标。
  原型:
  Open { { [global]  cursor_name } | cursor_variable_name }
  例如:
  Use northwind
  Go
  Declare employee_cursor cursor for    //定义游标
  Select lastname,firstname
  From northwind .dbo.employees
  Where firstname like ‘m%’
  Open employee_cursor    // 打开游标
  Fetch next from employee_cursor    //利用游标提取数据
  While @@fetch_status=0    //当利用FETCH提取数据成功时,运用循环提取下一条数据
  Begin    //循环体开始处
  Fetch next from employee_cursor
  End     //循环体结束
  close employee_cursor     //关闭游标
  Deallocate employee_cursor    // 释放游标
  4.close  关闭游标并释放结果集。
  5.fetch  通过游标从结果集中取值。
  原型:

  Fetch [next | prior | first | last | absolute {n | @nvar} |>  Cursor_name} | cursor_variable_name } [into @variable_name ] [,……n]
  参数说明:
  NEXT  指明从当前的行的下一行取值。
  PRIOR  指明人当前行的前一行取值。
  FIRST  结果集的第一行。
  LAST    结果集的最后一行。
  ABSOLUTE  n表示结果集中的第n行。该行数同样可以通过一个局部变量传播。
  RELATIVE  n表示要取出折行在当前的前n行或后n行的位置上。如果该值为正数则要取出的行在当前行前n行的位置上,如果该值为负数,则返回当前行的后n行。
  INTO @cursor_variable_name  表示游标列值存储的地方的变量列表。变量的数据类型也应该与被选择列的数据类型相同。直到下一次使用FETCH语句之前,变量中的值都会一直保持。
  函数返回值:
  利用@@FETCH_STATUS返回FETCH状态。
  0:FETCH 成功。
  1:FETCH 失败或超出设置范围。
  2:提取的数据行丢失。
  例如:
  Open employee_cursor
  Fetch next from employee_cursor
  While @@fetch_status = 0
  Begin
  Fetch next from employee_cursor
  End
  Close employee_curssor


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-625808-1-1.html 上篇帖子: 检测到目标URL存在SQL注入漏洞 下篇帖子: MySQL查找SQL耗时瓶颈SHOW profiles
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表