`
380071587
  • 浏览: 449072 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

解决为'*********' 的游标已存在问题

 
阅读更多
出现名为'MM_CURSOR' 的游标已存在。
一般出现这样的问题是:
1:游标没有 --关闭 释放
如:
Sql代码
  1. --关闭游标
  2. CLOSEMM_CURSOR
  3. --释放游标
  4. DEALLOCATEMM_CURSOR


2:游标已存在同名情况,此时就需要在定义游标时申明一个局部的游标
如:
Sql代码
  1. /*检索已经配置好的新村镇的所有乡级部门*/
  2. ---申明游标
  3. DECLAREdeptCursorCURSOR
  4. localFOR
  5. SELECTdeptname,deptsimplename,distid,deptuncode,deptqueryno,ifreport,deptsort,enable,deptfloor,deptcharacter,caseSMSFlag,deptType
  6. FROMt_department
  7. wherePARENTID=250anddeptType='2'




其实我的情况都不是这样,只是在使用嵌套多层循环操作时把两个游标全部放在存储过程末后

Sql代码
  1. --关闭游标
  2. CLOSEMM_CURSOR
  3. --释放游标
  4. DEALLOCATEMM_CURSOR
  5. --关闭游标--释放游标
  6. CLOSEdeptCursor
  7. --释放游标
  8. DEALLOCATEdeptCursor

没有及时关闭导致问题出现!
正确代码如下
Sql代码
  1. setANSI_NULLSON
  2. setQUOTED_IDENTIFIERON
  3. go
  4. ---dropPROCEDUREcopyDept
  5. ALTERPROCEDURE[dbo].[copyDept]
  6. as
  7. declare@deptCodevarchar(20)
  8. declare@deptnamevarchar(10)
  9. declare@deptsimplenamevarchar(100)
  10. declare@distidbigint
  11. declare@deptuncodevarchar(100)
  12. declare@deptquerynovarchar(100)
  13. declare@ifreportvarchar(4)
  14. declare@deptsortint
  15. declare@enablevarchar(6)
  16. declare@deptfloorsmallint
  17. declare@deptcharactervarchar(50)
  18. declare@caseSMSFlagvarchar(4)
  19. declare@deptTypevarchar(1)
  20. declare@DeNobigint
  21. setnocounton
  22. begin
  23. set@deptcode='2000000'
  24. /*检索已经配置好的新村镇的所有乡级部门*/
  25. ---申明游标
  26. DECLAREdeptCursorCURSOR
  27. localFOR
  28. SELECTdeptname,deptsimplename,distid,deptuncode,deptqueryno,ifreport,deptsort,enable,deptfloor,deptcharacter,caseSMSFlag,deptType
  29. FROMt_department
  30. wherePARENTID=250anddeptType='2'
  31. ---打开游标
  32. OPENdeptCursor
  33. --循环取出游标
  34. FETCHNEXTFROMdeptCursorINTO@deptname,@deptsimplename,@distid,@deptuncode,@deptqueryno,@ifreport,@deptsort,@enable,@deptfloor,@deptcharacter,@caseSMSFlag,@deptType
  35. while(@@FETCH_STATUS=0)
  36. begin
  37. /*检索乡镇行政部门:如赵集镇,龙王乡...*/
  38. ---申明游标
  39. DeclareMM_CURSORCURSOR
  40. localFOR
  41. SelectDEPTIDfromt_departmentwhereENABLE='启用'andDISTID=1anddeptType=0anddeptid!=250---demo,except250--andPARENTID=288--anddeptidnotin(243,244)--andis_convenience=@tjTypejc_dreaming
  42. OrderbyDEPTCODE/**ONLYVALIDDEPARTMENT*/
  43. --打开游标
  44. openMM_CURSOR
  45. --循环取出游标
  46. FETCHNEXTFROMMM_CURSORINTO@DeNo
  47. while(@@FETCH_STATUS=0)
  48. BEGIN
  49. set@deptcode=convert(varchar(20),cast(@deptcodeasint)+1)
  50. print(@deptcode)
  51. INSERTINTOT_DEPARTMENT(deptcode,deptname,deptsimplename,distid,deptuncode,deptqueryno,ifreport,deptsort,enable,deptfloor,PARENTID,deptcharacter,caseSMSFlag,deptType)
  52. VALUES(@deptcode,@deptname,@deptsimplename,@distid,@deptuncode,@deptqueryno,@ifreport,@deptsort,@enable,@deptfloor,@DeNo,@deptcharacter,@caseSMSFlag,@deptType)
  53. FETCHNEXTFROMMM_CURSORINTO@DeNo
  54. END
  55. --关闭游标
  56. CLOSEMM_CURSOR
  57. --释放游标
  58. DEALLOCATEMM_CURSOR
  59. FETCHNEXTFROMdeptCursorINTO@deptname,@deptsimplename,@distid,@deptuncode,@deptqueryno,@ifreport,@deptsort,@enable,@deptfloor,@deptcharacter,@caseSMSFlag,@deptType
  60. --@deptname,@deptsimplename,@distid,@deptuncode,@deptqueryno,@ifreport,@deptsort,@enable,@deptfloor,@deptcharacter,@caseSMSFlag,@deptType
  61. end
  62. end
  63. --关闭游标
  64. CLOSEdeptCursor
  65. --释放游标
  66. DEALLOCATEdeptCursor



此外,在刚开始调用存储过程还遇到一个问题:程序处于正在查询状态,近一个小时,我想,数据还没那么复杂,可能出现死循环或某个游标没有移动...
可是看了代码,没有出现这样的情况,
经同事指点:
Sql代码
  1. ---申明游标
  2. DeclareMM_CURSORCURSOR
  3. localFOR
  4. SelectDEPTIDfromt_departmentwhereENABLE='启用'andDISTID=1anddeptType=0anddeptid!=250---demo,except250--andPARENTID=288--anddeptidnotin(243,244)--andis_convenience=@tjTypejc_dreaming
  5. OrderbyDEPTCODE/**ONLYVALIDDEPARTMENT*/
  6. --打开游标
  7. openMM_CURSOR
  8. --循环取出游标
  9. FETCHNEXTFROMMM_CURSORINTO@DeNo
  10. while(@@FETCH_STATUS=0)
  11. set@deptcode=convert(varchar(20),cast(@deptcodeasint)+1)//把此行代码移至begin代码内即可
  12. BEGIN
  13. print(@deptcode)
  14. INSERTINTOT_DEPARTMENT(deptcode,deptname,deptsimplename,distid,deptuncode,deptqueryno,ifreport,deptsort,enable,deptfloor,PARENTID,deptcharacter,caseSMSFlag,deptType)
  15. VALUES(@deptcode,@deptname,@deptsimplename,@distid,@deptuncode,@deptqueryno,@ifreport,@deptsort,@enable,@deptfloor,@DeNo,@deptcharacter,@caseSMSFlag,@deptType)
  16. FETCHNEXTFROMMM_CURSORINTO@DeNo
  17. END
  18. --关闭游标
  19. CLOSEMM_CURSOR
  20. --释放游标
  21. DEALLOCATEMM_CURSOR

分享到:
评论

相关推荐

    SQL sever 实训

    --单元十三 游标 --创建存储过程P_SelProduct,逐行显示产品销售信息,内容包括编号、产品名称、销售日期、 --销售数量、销售金额、要求显示格式如下: --产品编号 产品名称 销售日期 销售数量 销售金额 --00001 ...

    SQLServer2008查询性能优化 2/2

    7.6.2 解决过时统计问题 184 7.7 建议 186 7.7.1 统计的向后兼容性 186 7.7.2 自动创建统计 186 7.7.3 自动更新统计 187 7.7.4 自动异步更新统计 189 7.7.5 收集统计的采样数量 189 7.8 小结 190 第8章 ...

    SQLServer2008查询性能优化 1/2

    7.6.2 解决过时统计问题 184 7.7 建议 186 7.7.1 统计的向后兼容性 186 7.7.2 自动创建统计 186 7.7.3 自动更新统计 187 7.7.4 自动异步更新统计 189 7.7.5 收集统计的采样数量 189 7.8 小结 190 第8章 ...

    ADO与ADO_NET编程指南

    我会提出一些关于数据访问的情况进行探讨,说明如何利用ADO予以解决,并对比说明如何在用C#开发的ASP.NET应用程序通过ADO.NET进行解决。我将以连接数据源的相似操作为论述的切入点,然后,我们会看到ADO的Recordset...

    个人制作播放器

    此举主要解决因OCX或类型库版本升级可能导致的兼容性问题(比如用新版NPK打开此前用旧版NPK编写的易语言源代码时产生命令调用错乱现象)。但对于OCX或类型库作者升级时改变了原有方法的dispid的情况,就无能为力了;...

    SQL21日自学通

    用一个已经存在的表来建表184 ALTER TABLE 语句185 DROP TABLE 语句186 DROP DATABASE语句187 总结188 问与答188 校练场189 练习190 第10 天 创建视图和索引191 目标191 使用视图192 列的重命名196 SQL 对视图的处理...

    SQL SERVER 2000开发与管理应用实例

    本书不但融合了作者在使用SQL Server 2000过程中遇到的各种常见问题和应用案例,还总结了作者几年来在CSDN 社区SQL Server版所解决的大量问题,面向实际项目需求,涉及不同类型的应用,能够多角度地引导读者学习相关...

    ArduboyGraph2:Arduboy的图形计算器!

    设置(禁用轴线,点而不是线,DEG或RAD等)已知的问题一些问题是从复制: 除法操作相反(与功能有关的问题) 游标软重置Arduboy,当它离开屏幕时主菜单RPN调试屏幕(与GraphFont相关的问题) 这已“解决”,但根本...

    sqlserver2000基础(高手也有用)

    15.5.2 检查指定的游标是否存在 480 15.5.3 事务提交或者回滚对游标的影响 482 15.5.4 可更新的游标 483 15.6 SQL Server处理中的其他疑难解答 484 15.6.1 并发工作负荷调控器 484 15.6.2 存储过程中的...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 oracle的体系很庞大,要学习它,首先要了解oracle的框架。oracle的框架主要由物理结构、逻辑结构、内存分配、后台进程...

    PCB传送机构介绍

    连接器应用十分广泛,从小到无线蓝牙耳机大到火箭军工等领域都存在着它的身影,而连接器关键的部件就是它的接触点也就是端子。近20年连接器厂家轩业多年制造经验对于端子压接工艺有一些心得体会与大家分享。   ...

    stream-faqs:让我们一起学习这些东西

    您的用例可能被“重新考虑”并应用于类似问题的现有解决方案 您可以来这里寻求帮助,我会尽力回答或寻求帮助。 问题 如果您发现任何这些信息不准确或不完整,请随时贡献PR! -- 如何提出分页的API请求? 问题 您...

    PHPG:PHP的PostgreSQL数据库接口库,具有复杂数据类型的自动转换,包括`array`和`hstore`

    一个用 PHP 编写的 PostgreSQL 数据库接口,专门用于解决和解决 PHP 的本机 PostgreSQL 驱动程序的大多数长期存在的问题。 许多底层功能利用 PHP 的本机 PostgreSQL 驱动程序来保持性能和可靠性。 特征 自动检测...

    T-SQL技巧收集??拆分字符串

    下面收集了几种方法供大家分享,其中的逗号可以改为多种有需要的符号,但是不能针对多种符号同时存在的例子。有待各位补充:  说明:  将字符串转换为正规化的数据表,可以使用多种方法实现,比如前端程序处理...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    市场上相应的检测平台诸如检测通、凡特网等皆为pc端检测网站,并且操作繁琐不够人性化,用户在实地使用中存在很多问题。昆山工业技术研究院着眼于为委托用户和质检机构搭建良好的沟通桥梁,免去目前市场业务中企业...

    存储过程的安全及性能优化

    command_string数据类型为varchar(255)或者nvarchar(4000),没有默认值  no_output为可选参数,可以控制是否想客户端返回信息  该存储过程一般情况下被禁用的,需要手动开启使用,如下:  exec sp_configure '...

    使用数字电位器替代机械电位器

    机械电位器本身存在一些固有的局限性,比如:尺寸大小、机械磨损、游标污染、电阻漂移、对振动和湿度敏感以及布局缺乏灵活性,这一切都是由其物理结构所决定的。  数字电位器旨在解决所有上述问题,提供更高的可靠...

    深入云计算 MongoDB管理与开发实战详解pdf.part1

    注重实战,通过实际中的案例为读者讲解使用MongoDB时遇到的各种问题,并给出了解决方案。本书旨在帮助云计算初学者迅速掌握MongoDB数据库,提升读者在云计算实践中的应用和开发能力。同时本书极强的系统性和大量翔实...

Global site tag (gtag.js) - Google Analytics