mysql游标的使用

原创 2011年01月18日 16:01:00

这是一个游标的使用例子.

但是其中有几点需要注意,就是为什么要加入 declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpname = null;这样的一句话.

如果不加的话将直接报错.No data - zero rows fetched, selected, or processed

另外也有人提示过这样的经验:

经验之谈:
在MYSQL的存储过程一般要设个变量来跟踪是否NOT FOUND

DECLARE IS_FOUND INTEGER DEFAULT 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET IS_FOUND=0;
** 上面这行表示若没有数据返回,程序继续,并将变量IS_FOUND设为0

这种情况是出现在select XX into XXX from tablename的时候发生的,这个时候如果XX是null就会有问题.其实也可以这样解决

select isnull(xxxx,0) into aaaa from tableName

这样如果遇到null就为0了..

/*初始化*/
drop procedure if exists   useCursor //    

/*建立 存储过程 create */
CREATE PROCEDURE useCursor()
    
BEGIN
    
/*局部变量的定义 declare*/
         
declare tmpName varchar(20) default '' ;
         
declare allName varchar(255) default '' ;
         
         
declare cur1 CURSOR FOR SELECT name FROM test.level ;
         
         
/*     mysql 不知道为什么用异常加入判断 ?
           *     此请参考官方文档
20.2.11. 光标 光标
           *         这把 游标 异常后 捕捉
           *         并设置 循环使用 变量 tmpname 为 null 跳出循环。
          
*/
         
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpname = null;
    
    
    
/*开游标*/
     
OPEN cur1;
         
/*游标向下走一步*/
         
FETCH cur1 INTO tmpName;
         
         
/* 循环体 这很明显 把游标查询出的 name 都加起并用 ; 号隔开 */
      
WHILE ( tmpname is not null) DO
          
set tmpName = CONCAT(tmpName ,";") ;
       
set allName = CONCAT(allName ,tmpName) ;
        
/*游标向下走一步*/
        
FETCH cur1 INTO tmpName;
      
END WHILE;
  
    
CLOSE cur1;
    
    
select allName ;
END;//
call useCursor()
//

相关文章推荐

MySql中DECLARE CONTINUE HANDLER FOR NOT FOUND 解释

转载地址:http://blog.csdn.net/tengdazhang770960436/article/details/12712143 1.解释: 在MySQL的存储过程中经常...
  • wanglha
  • wanglha
  • 2016年05月17日 10:28
  • 3780

DECLARE CONTINUE HANDLER FOR NOT FOUND 解释

1.解释: 在MySQL的存储过程中经常会看到这句话:DECLARE CONTINUE HANDLER FOR NOT FOUND。 它的含义是:若没有数据返回,程序继续,并将变量IS_FOUND...

DECLARE CONTINUE HANDLER FOR NOT FOUND 解释

1.解释: 在mysql的存储过程中经常会看到这句话:DECLARE CONTINUE HANDLER FOR NOT FOUND。 它的含义是:若没有数据返回,程序继续,并将变量IS_FOUND...

mysql存储过程的注意点

以下为我写的一个例子:主要功能是把OA的弹窗提醒功能与redmine连接在一起; delimiter // create trigger t_trigger AFTER insert on iss...

DECLARE CONTINUE/EXIT HANDLER FOR SQLSTATE 中CONTINUE和EXIT的区别

CREATE DEFINER PROCEDURE TEST()BEGIN  DECLARE rec_curs_value INT;  DECLARE curs_dot CURSOR FOR SELEC...
  • fm0517
  • fm0517
  • 2009年03月09日 20:28
  • 3919

mysql异常处理

针对存储过程 、触发器或函数内部语句可能发生的错误或警告信息,需要进行相关异常或称 例外的捕捉,然后作出相应的处理,异常处理的方式如下: DECLARE {CONTINUE | EXIT} HAND...
  • seteor
  • seteor
  • 2014年01月03日 18:03
  • 11386

Mysql存储过程游标加循环

Mysql的存储过程是从版本5才开始支持的,所以目前一般使用的都可以用到存储过程。今天分享下自己对于Mysql存储过程的认识与了解。 一些简单的调用以及语法规则这里就不在赘述,网上有许多例子。这里主...

MySql错误处理-错误处理的例子

有几种错误处理的声明形式:  § 如果任何错误(不是 NOT FOUND ) , 设置 l_error 为 1 后继续执行:  DECLARE CONTINUE HANDLER FOR SQLEXCE...

MySql错误处理-错误处理的例子

有几种错误处理的声明形式:  § 如果任何错误(不是 NOT FOUND ) , 设置 l_error 为 1 后继续执行:  DECLARE CONTINUE HANDLER FOR SQLEXCE...

mysql中游标的运用

游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制;游标充当指针的作用;尽管游标能遍历结果中的所有行,但他一次只指向一行。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql游标的使用
举报原因:
原因补充:

(最多只允许输入30个字)