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

出现名为'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
时间: 2024-10-31 21:28:28

解决为'*********' 的游标已存在问题的相关文章

Unknown column '*' in 'field list' 异常解决

在使用Hibernate做持久化的时候,为实体类定义一个与数据表无关的属性. 出现异常如下: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'user0_.authority' in 'field list' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.Native

解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题

对于这个问题,我相信我的方法已经能帮90%的人解决了! 当你用Eclipse运行web项目的时候,你就会看到控制台出现:WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:firstProject' did not find a matching property.这样的字样,说的是server.xml的S

解决Pandoc wasn't found.pdflatex not found on PATH

解决nbconvert failed: Pandoc wasn't found.解决nbconvert failed: pdflatex not found on PATH 问题1描述 500 : Internal Server Error nbconvert failed: Pandoc wasn't found. Please check that pandoc is installed: 问题2描述 500 : Internal Server Error nbconvert failed:

解决 emoji表情存入数据库为' ??? '

今天把mysql切换为mariaDB,这是题外话   主要是emoji标签存入数据库会发现出现三个???的问题 页面上也显示不出来,解决办法只要把内容从数据库里拿出来的时候解码即可 for (Feedback f : feedbackList) { String newTitle = StringEscapeUtils.unescapeJava(f.getTitle()); String newContent = StringEscapeUtils.unescapeJava(f.getConte

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) root@mysql ~]# mysql -p -u root Enter password:  ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) ERROR 1045 (28000): Access denied

C#实现按键精灵的'找图' '找色' '找字'的功能

背景:游戏辅助功能通常使用按键精灵编写脚本,按键精灵的最大卖点就是能够找到画面中字,图,色,这对于模拟用户鼠标操作至关重要,这能找到道具,找到血量,实现自动打怪,自动补血,自动买卖道具,博主闲来无聊,看到一款按键精灵实现的辅助,于是乎想用WPF也写一款辅助工具,实现其核心的找图找色等功能.博主测试,对于背景复杂多变的画面,找不变图的成功率达到100%,找带透明的图,比如文字,能达到90%以上.默认您已经知道一个颜色值由argb构成,每个值范围都是0~255.网上发现不少人询问过该问题,几乎没有比

mysql全局权限账户%登录不上ERROR 1045 (28000): Access denied for user 'mhz'@'localhost' (using password: YES)

mysql全局权限账户%登录不上 ERROR 1045 (28000): Access denied for user 'mhz'@'localhost' (using password: YES)  解决 查看错误提示  有主机名字的就必须赋值主机名 mysql> GRANT ALL PRIVILEGES ON *.* TO 'mhz'@'mgr2' IDENTIFIED BY 'mhz' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 s

无法删除登录名 '***',因为该用户当前正处于登录状态。 (Microsoft SQL Server,错误: 15434)

问题描述: 当删除数据库用户时,有时会得到这样的提示: 无法删除登录名 '***',因为该用户当前正处于登录状态. (Microsoft SQL Server,错误: 15434) 解决办法: 1.首先执行:EXEC sp_who 查出用户进程的spid, 2.然后执行:kill spid 3.最后执行:sp_drop login [用户名]

failed: Access denied for user 'root'@'localhost' (using password: YES) at /usr/bin/innobackupex lin

[root@t1 /]#  innobackupex --user=root --password /mydata/data /tmp/dir/ InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy and Percona LLC and/or its affiliates 2009-2013.  All Rights Reserved. This software is published under