位置: 编程技术 - 正文

Sql存储过程游标循环的用法及sql如何使用cursor写一个简单的循环(mysql存储过程 游标)

编辑:rootadmin

推荐整理分享Sql存储过程游标循环的用法及sql如何使用cursor写一个简单的循环(mysql存储过程 游标),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:存储过程oracle 游标,mysql存储过程语法和游标的语法,sql存储过程游标local,plsql存储过程游标调用,plsql存储过程游标调用,mysql存储过程 游标,sqlserver存储过程游标和for循环哪个快,sqlserver 存储过程 游标,内容如对您有帮助,希望把文章链接给更多的朋友!

用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理

==================

……您要执行的操作写在这里

—————————————

在应用程序开发的时候,我们经常可能会遇到下面的应用,我们会通过查询数据表的记录集,循环每一条记录,通过每一条的记录集对另一张表进行数据进行操作,如插入与更新,我们现在假设有一个这样的业务:老师为所在班级的学生选课,选的课程如有哲学、马克思主义政治经济学、毛泽东思想概论、邓小平理论这些课,现在操作主要如下:

1) 先要查询这些还没有毕业的这些学生的名单,毕业过后的无法进行选课;2) 在批量的选取学生的同时,还需要添加对应的某一门课程;3) 点添加后选课结束。

数据量少可能看不出用Java程序直接多次进行数据库操作这种办法实现的弱点,因为它每次在操作数据库的时候,都存在着频繁的和数据库的I/O直接交互,这点性能的牺牲实属不应该,那我们就看下面的方法,通过存储过程的游标方法来实现:建立存储过程:

使用游标对记录集循环进行处理的时候一般操作如以下几个步骤:

1、把记录集传给游标;2、打开游标3、开始循环4、从游标中取值5、检查那一行被返回6、处理7、关闭循环8、关闭游标

上面这种方法在性能上面无疑已经是提高很多了,但我们也想到,在存储过程编写的时候,有时候我们尽量少的避免使用游标来进行操作,所以我们还可以对上面的存储过程进行改造,使用下面的方法来实现:

我们现在再来分析以上这个存储过程,它实现的方法是先把满足条件的记录集数据存放到一个表变量中,并且在这个表变量中增加一个FLAGID进行数据初始值为0的存放,然后去循环这个记录集,每循环一次,就把对应的FLAGID的值改成1,然后再根据循环来查找满足条件等于0的情况,可以看到,每循环一次,处理的记录集就会少一次,然后循环的往选好课程表里面插入,直到记录集的条数为0时停止循环,此时完成操作。

比较以上的几种循环方法的应用,就会知道,有时候可能对于同一种功能我们实现的方法不同,而最终应用程序性能的影响的差异就会很大,第二种、第三种就大大的减少的数据库交互I/O操作的频繁,会节省很多时间,方法三又避免用游标又可以节省不必要的开销。

使用SQL的Agent可以执行计划任务,把写好的SQL语句放在计划任务里,可以达到奇妙的效果,如定时备份数据,定时执行特定操作等等,当涉及循环操作很多条数据时,这里就要使用游标了,当然SQL中也有循环语句,如使用While。不过while的功能只能实现一般的操作,游标的功能更为强大些,可在一个指定的一个集合内循环操作数据,实现动态操作,那就更牛了,呵呵,以下资料供存档用。

WHILE

设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。

语法

参数

Boolean_expression

返回 TRUE 或 FALSE 的表达式。如果布尔表达式中含有 SELECT 语句,必须用圆括号将 SELECT 语句括起来。

Transact-SQL 语句或用语句块定义的语句分组。若要定义语句块,请使用控制流关键字 BEGIN 和 END。

BREAK

导致从最内层的 WHILE 循环中退出。将执行出现在 END 关键字后面的任何语句,END 关键字为循环结束标记。

CONTINUE

Sql存储过程游标循环的用法及sql如何使用cursor写一个简单的循环(mysql存储过程 游标)

使 WHILE 循环重新开始执行,忽略 CONTINUE 关键字后的任何语句。

注释

如果嵌套了两个或多个 WHILE 循环,内层的 BREAK 将导致退出到下一个外层循环。首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。

示例

------------------------------------------------------------

A. 在嵌套的 IF...ELSE 和 WHILE 中使用 BREAK 和 CONTINUE

在下例中,如果平均价格少于 $,WHILE 循环就将价格加倍,然后选择最高价。如果最高价少于或等于 $,WHILE 循环重新启动并再次将价格加倍。该循环不断地将价格加倍直到最高价格超过 $,然后退出 WHILE 循环并打印一条消息。

B. 在带有游标的过程中使用 WHILE

以下的 WHILE 结构是名为 count_all_rows 过程中的一部分。下例中,该 WHILE 结构测试用于游标的函数 @@FETCH_STATUS 的返回值。因为 @@FETCH_STATUS 可能返回 ?2、-1 或 0,所以,所有的情况都应进行测试。如果某一行在开始执行此存储过程以后从游标结果中删除,将跳过该行。成功提取 (0) 后将执行 BEGIN...END 循环内部的 SELECT 语句。

单变量循环

多变量循环

下面接着给大家介绍sql使用cursor写一个简单的循环

1.排错

  和sql server较了一天的劲,只写了两个简单的存储过程。当然智商虽然不高还没低到这个份上。大半天都是花费在排错上了。

  System.Data.SqlClient.SqlException: SQL Server 不存在或访问被拒绝。 at

System.Data.SqlClient.ConnectionPool.GetConnection(Boolean& isInTransaction) at System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction) at System.Data.SqlClient.SqlConnection.Open() at _.WebForm1.test() in d:work fileswebform1.aspx.cs:line

  冷不丁报了这个错,这个就是从程序里连不上。在服务中除了MSSQLserverADHelper以外所有的服务都打开了还是不行;名称正确、无别名、没起实例名称;端口号服务器端和客户端都是。为了找出问题只好上网查查结果发现连上网线后这个毛病就没了。晕,看来是少打了什么补丁。

2.写循环

  首先需求是这样的我手里现在有两张表,rights和roles。

  表结构如下:

    在我的role表里有一个角色admin。admin拥有right表中的所有权限,但是有四个字段,要是用手写完我这个速度,加上这个数量我看也就算了。省了手上的力气就要费脑子。

  在查询分析器里写了半天,总算是吭哧出来了。

  首先使用truncate table把role原来的失败信息清掉,听说会比delete快一点,只不过数量少看不出明显效果。

  然后建立一个临时的用于填充的存储过程。

  这样就写完了。

  execute TempFill 再执行他一下。

SQL Server创建数据库和数据表的相关约束实现方法 本文分析了SQLServer创建数据库和数据表的相关约束实现方法。分享给大家供大家参考,具体如下:创建约束语法如下:CREATEDATABASE[test]ON(NAME=N'test',FILENAME

SqlDateTime溢出该怎么解决 错误出现:导入数据时出现SqlDateTime溢出。必须介于1/1/::AM和//::PM之间。出现这种问题多半是因为你插入或者更新数据库时datetime字段

SQL Server TempDb里的显著提升 几个星期前,SQLServer的最新CTP版本已经发布了:CTP2.4(目前已经是CTP3.0)。关于SQLServerCTP2.3的关键特性总结,在此不多说了,具体内容请查相关资料

标签: mysql存储过程 游标

本文链接地址:https://www.jiuchutong.com/biancheng/312837.html 转载请保留说明!

上一篇:针对distinct疑问引发的一系列思考(distinct用法及搭配)

下一篇:SQL Server创建数据库和数据表的相关约束实现方法(sql server创建数据表的完整语法)

  • 自来水安装增值税税率
  • 注册会计师考试时间2023
  • 资产减值准备的计提方法
  • 建筑业挂靠企业所得税如何收取
  • 商贸企业印花税税率
  • 个人投资者取得现金红利的过程不用支付利息税
  • 合伙企业个人所得税怎么申报
  • 海关未抵扣证明
  • 收到加工劳务发票怎么做
  • 写字楼出租可以给租户注册吗
  • 费用进项税额转出怎么做账务处理分录
  • 不付供应商尾款了怎么清账
  • 应交税费应交增值税的三级科目有哪些
  • 土地使用税是由出租方还是承租方交
  • 医院行业类别怎样填写
  • 个体户发票冲红应该具备什么条件
  • 小规模纳税人咨询服务费的税率是多少
  • 法人变更后的涉税问题
  • 小规模税收减免
  • 业务招待住宿进什么科目
  • 个人独资企业对公账户转个人账户
  • 代账会计的职责
  • 收到销售折让销售怎么做
  • 收到发票怎么写说明
  • 电脑自带网速测试
  • 劳务费和服务费税率一样吗
  • php+mysql项目实战教程
  • PHP:Memcached::getMultiByKey()的用法_Memcached类
  • 其他应付款在现金流量表怎么填
  • 员工食堂餐费可以税前扣除吗
  • loaddriver.exe是什么病毒
  • 电脑前面板耳机没声音怎么设置bios
  • php实现验证码功能
  • php proto
  • 哪些项目容易漏缴个人所得税?
  • 应扣未扣应收未收税款是什么意思
  • 长期借款转为实收资本怎么做账
  • 构造二叉排序树代码
  • 中草药进销差价会计分录
  • 会计如何分录
  • 计提支付公积金
  • 残疾人就业保障金怎么申报
  • 异地预缴的附加税在申报税时会抵消掉么
  • mongodb 入门
  • sql server数字类型
  • 电子税务局如何增加税种认定
  • 小企业销售折让与销售退回发生时如何处理
  • 中餐补助
  • 免税农产品按多少抵扣
  • 收到普票和专票对企业的纳税影响
  • 资源税计税依据是开采量还是销售量
  • 特许权使用费计入无形资产吗
  • 员工外面有自己的公司
  • 固定资产怎么入费用
  • 会计做账做错了
  • 注册资本可以是欧元吗
  • 收到银联商务客户短信
  • 账本页面设置
  • vista启用aero
  • boot from
  • centos7 ip forward
  • linux i3桌面
  • win8资源管理器未响应
  • vmware centos8
  • 为什么win8系统的键盘输入不了字
  • win7系统电脑卡住了怎么办
  • win8系统如何关闭杀毒系统
  • win8.1截图工具快捷键
  • ExtJS PropertyGrid中使用Combobox选择值问题
  • node.js中module.exports与exports用法上的区别
  • jquery点击切换背景颜色
  • linux链接ln
  • Facebook推出强大Android图片库Fresco 自动释放内存 图片缓存 内存益处
  • 请问在javascript程序中
  • unity3d 场景
  • jquery使用Cookie和JSON记录用户最近浏览历史
  • 欢迎使用微信支付
  • 行政机关吗
  • 税务网上申报怎样操作
  • 小规模纳税人和一般纳税人的区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设