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

简介:
出现名为'MM_CURSOR' 的游标已存在。 
一般出现这样的问题是: 
1:游标没有    --关闭 释放 
如: 
Sql代码   
  1. --关闭游标  
  2.       CLOSE MM_CURSOR  
  3.         --释放游标  
  4.      DEALLOCATE MM_CURSOR  


2:游标已存在同名情况,此时就需要在定义游标时申明一个局部的游标 
如: 
Sql代码   
  1. /*检索已经配置好的新村镇的所有乡级部门*/  
  2.    ---申明游标  
  3. DECLARE deptCursor CURSOR   
  4.    local FOR   
  5.    SELECT  deptname, deptsimplename,distid, deptuncode,deptqueryno,ifreport,deptsort,enable,deptfloor,deptcharacter,caseSMSFlag,deptType  
  6.            
  7.    FROM t_department   
  8.    where  PARENTID=250 and deptType='2'  




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

Sql代码   
  1. --关闭游标  
  2.       CLOSE MM_CURSOR  
  3.         --释放游标  
  4.      DEALLOCATE MM_CURSOR  
  5.    --关闭游标--释放游标  
  6. CLOSE deptCursor  
  7.    --释放游标  
  8. DEALLOCATE deptCursor  

没有及时关闭导致问题出现! 
正确代码如下 
Sql代码   
  1. set ANSI_NULLS ON  
  2. set QUOTED_IDENTIFIER ON  
  3. go  
  4. ---drop  PROCEDURE copyDept  
  5.   
  6. ALTER PROCEDURE [dbo].[copyDept]  
  7.     as  
  8.     declare @deptCode varchar(20)  
  9.     declare @deptname varchar(10)  
  10.     declare @deptsimplename varchar(100)  
  11.     declare @distid bigint  
  12.     declare @deptuncode varchar(100)  
  13.     declare @deptqueryno varchar(100)  
  14.     declare @ifreport varchar(4)  
  15.     declare @deptsort int  
  16.     declare @enable varchar(6)  
  17.     declare @deptfloor smallint  
  18.     declare @deptcharacter varchar(50)  
  19.     declare @caseSMSFlag varchar(4)  
  20.     declare @deptType varchar(1)  
  21.     declare @DeNo bigint  
  22.     set nocount on  
  23.     begin  
  24.     set  @deptcode = '2000000'  
  25.     /*检索已经配置好的新村镇的所有乡级部门*/  
  26.     ---申明游标  
  27.     DECLARE deptCursor CURSOR   
  28.     local FOR   
  29.     SELECT  deptname, deptsimplename,distid, deptuncode,deptqueryno,ifreport,deptsort,enable,deptfloor,deptcharacter,caseSMSFlag,deptType  
  30.                
  31.     FROM t_department   
  32.     where  PARENTID=250 and deptType='2'  
  33.     ---打开游标  
  34.     OPEN deptCursor  
  35.     --循环取出游标      
  36.     FETCH NEXT FROM deptCursor INTO @deptname,@deptsimplename,@distid,@deptuncode,@deptqueryno,@ifreport,@deptsort,@enable,@deptfloor,@deptcharacter,@caseSMSFlag,@deptType     
  37.     while (@@FETCH_STATUS = 0)  
  38.         begin  
  39.             /*检索乡镇行政部门:如赵集镇,龙王乡...*/  
  40.             ---申明游标  
  41.             Declare MM_CURSOR CURSOR  
  42.             local  FOR  
  43.             Select DEPTID from t_department where  ENABLE= '启用' and DISTID = 1 and deptType=0 and deptid !=250---demo,except 250 -- and PARENTID =288--and deptid not in (243,244)--and is_convenience=@tjType jc_dreaming  
  44.             Order by DEPTCODE /**ONLY VALID DEPARTMENT */  
  45.             -- 打开游标  
  46.             open MM_CURSOR  
  47.             --循环取出游标      
  48.             FETCH NEXT FROM MM_CURSOR  INTO @DeNo  
  49.             while (@@FETCH_STATUS = 0)                
  50.                 BEGIN  
  51.                  set @deptcode = convert(varchar(20),cast(@deptcode as int)+1)  
  52.                 print(@deptcode)  
  53.                  INSERT INTO T_DEPARTMENT (deptcode, deptname, deptsimplename,distid, deptuncode,deptqueryno,ifreport,deptsort,enable,deptfloor,PARENTID,deptcharacter,caseSMSFlag,deptType)  
  54.                                     VALUES (@deptcode,@deptname,@deptsimplename,@distid,@deptuncode,@deptqueryno,@ifreport,@deptsort,@enable,@deptfloor,@DeNo,@deptcharacter,@caseSMSFlag,@deptType)  
  55.                 FETCH NEXT FROM MM_CURSOR INTO @DeNo  
  56.                 END  
  57.             --关闭游标  
  58.           CLOSE MM_CURSOR  
  59.          --释放游标  
  60.          DEALLOCATE MM_CURSOR  
  61.         FETCH NEXT FROM deptCursor INTO @deptname,@deptsimplename,@distid,@deptuncode,@deptqueryno,@ifreport,@deptsort,@enable,@deptfloor,@deptcharacter,@caseSMSFlag,@deptType     
  62.                                         --@deptname,@deptsimplename,@distid,@deptuncode,@deptqueryno,@ifreport,@deptsort,@enable,@deptfloor,@deptcharacter,@caseSMSFlag,@deptType  
  63.         end  
  64.           
  65.     end  
  66.    
  67.     --关闭游标  
  68.     CLOSE deptCursor  
  69.     --释放游标  
  70.     DEALLOCATE deptCursor  



此外,在刚开始调用存储过程还遇到一个问题:程序处于正在查询状态,近一个小时,我想,数据还没那么复杂,可能出现死循环或某个游标没有移动... 
可是看了代码,没有出现这样的情况, 
经同事指点: 
Sql代码   
  1. ---申明游标  
  2.             Declare MM_CURSOR CURSOR  
  3.             local  FOR  
  4.             Select DEPTID from t_department where  ENABLE= '启用' and DISTID = 1 and deptType=0 and deptid !=250---demo,except 250 -- and PARENTID =288--and deptid not in (243,244)--and is_convenience=@tjType jc_dreaming  
  5.             Order by DEPTCODE /**ONLY VALID DEPARTMENT */  
  6.             -- 打开游标  
  7.             open MM_CURSOR  
  8.             --循环取出游标      
  9.             FETCH NEXT FROM MM_CURSOR  INTO @DeNo  
  10.             while (@@FETCH_STATUS = 0)    
  11.                 set @deptcode = convert(varchar(20),cast(@deptcode as int)+1)   //把此行代码移至begin代码内即可       
  12.                 BEGIN  
  13.                  
  14.                 print(@deptcode)  
  15.                  INSERT INTO T_DEPARTMENT (deptcode, deptname, deptsimplename,distid, deptuncode,deptqueryno,ifreport,deptsort,enable,deptfloor,PARENTID,deptcharacter,caseSMSFlag,deptType)  
  16.                                     VALUES (@deptcode,@deptname,@deptsimplename,@distid,@deptuncode,@deptqueryno,@ifreport,@deptsort,@enable,@deptfloor,@DeNo,@deptcharacter,@caseSMSFlag,@deptType)  
  17.                 FETCH NEXT FROM MM_CURSOR INTO @DeNo  
  18.                 END  
  19.             --关闭游标  
  20.           CLOSE MM_CURSOR  
  21.          --释放游标  
  22.          DEALLOCATE MM_CURSOR

目录
相关文章
|
安全 Java 开发者
Java多线程编程中的常见问题与解决方案
本文深入探讨了Java多线程编程中常见的问题,包括线程安全问题、死锁、竞态条件等,并提供了相应的解决策略。文章首先介绍了多线程的基础知识,随后详细分析了每个问题的产生原因和典型场景,最后提出了实用的解决方案,旨在帮助开发者提高多线程程序的稳定性和性能。
|
数据挖掘 Python
DrissionPage实战之采集猫眼电影top100榜
在信息化时代,数据的重要性日益凸显,特别是在充满活力的电影行业。猫眼电影作为中国领先的电影票务平台,提供了丰富的电影信息和用户评价,成为研究电影市场趋势的重要数据源。通过Python的DrissionPage库抓取猫眼电影Top 100榜单,不仅能够帮助影迷了解热门影片,还为制片方、市场分析师和投资者提供了宝贵的市场洞察。此项目通过自动化脚本定期更新数据,分析市场变化,助力精准决策。
331 0
|
机器学习/深度学习 人工智能 搜索推荐
AI在医疗领域的应用与未来展望
随着科技的不断进步,人工智能(AI)在医疗领域展现出了巨大的潜力和价值。本文将探讨AI在医疗领域的具体应用及其未来发展的可能性,揭示AI技术如何改变我们的医疗体验和健康管理。
|
SQL canal JSON
Elastic实战:canal同步mysql到es之父子表数据同步|对象型数组同步|nested数组同步
最近在做mysql到es的数据同步,涉及到父子表数据同步,特此记录,以供后续参考
661 0
Elastic实战:canal同步mysql到es之父子表数据同步|对象型数组同步|nested数组同步
|
JavaScript Java Linux
Utools软件的使用教程又双叒叕更新了~
Utools软件的使用教程又双叒叕更新了~
1287 0
Utools软件的使用教程又双叒叕更新了~
|
缓存 JavaScript CDN
webpack打包优化之外部扩展(Externals)配置
webpack打包优化之外部扩展(Externals)配置
739 0
webpack打包优化之外部扩展(Externals)配置
|
Python
Command "python setup.py egg_info" failed with error code 1
Command "python setup.py egg_info" failed with error code 1
243 0
Command "python setup.py egg_info" failed with error code 1
|
开发框架 弹性计算 运维
阿里云无影研发负责人任晋奎:无影核心技术能力突破
无影架构云网端融合体验背后的核心技术能力解读
928 0
阿里云无影研发负责人任晋奎:无影核心技术能力突破
|
人工智能 分布式计算 大数据
阿里开发者招聘节 | 2019阿里巴巴技术面试题集锦!参考答案已公布!
阿里巴巴资深技术专家们结合多年的工作、面试经验总结提炼而成的笔试真题这一次将陆续放出(面试题答案将在专辑分享结束后统一汇总分享)。并通过这些笔试真题开放阿里巴巴工作机会,让更多的开发者加入到阿里这个大平台。
|
存储 运维 监控
图扑软件联手阿里云Lindorm数据库开启数据可视化艺术的篇章
图扑软件聚焦工业物联网监控运维可视化应用领域,专注基于Web 的 2D 和 3D 图形界面组件技术,为客户提供从咨询、设计、实施到售后的全方位可视化管理支持服务。图扑软件完全独立自主知识产权的HT for Web 软件已应用于电信、电力、交通、水利、石化、制造、医疗、工控等行业场景。
图扑软件联手阿里云Lindorm数据库开启数据可视化艺术的篇章