mysql游标的使用 No data - zero rows fetched, selected

转自:http://blog.sina.com.cn/s/blog_544c72960101bvl3.html

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

但是其中有几点需要注意,就是为什么要加入 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 PROCEDURE useCursor()
    BEGIN
     
         declare tmpName varchar(20) default ‘‘ ;
         declare allName varchar(255) default ‘‘ ;
         
         declare cur1 CURSOR FOR SELECT name FROM test.level ;
         
         
         declare CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET tmpname = null;
    
    
     
     OPEN cur1;
          
         FETCH cur1 INTO tmpName;
         
         
      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()//

时间: 2024-10-10 16:21:50

mysql游标的使用 No data - zero rows fetched, selected的相关文章

错误解决mysql - Event Scheduler: No data - zero rows fetched, selected, or processed

当遇到一个NOT FOUND(无数据)的警告时,使用一个包含清除警告语句的条件句柄处理,就可以继续处理程序并退出句柄. 这个问题在MySQL5.6.3之后的版本已经解决了,所以该解决方法不是必要的. 解决方法: DECLARE CONTINUE HANDLER FOR NOT FOUND BEGIN SET done=1 SELECT 1 INTO @handler_invoked FROM (SELECT 1) AS t; END; 来源:Click the link(http://dev.m

SqlServer和MySQL游标学习

一 sqlserver游标使用 /*** 游标的使用  讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱.  使用游标的顺序: 声名游标.打开游标.读取数据.关闭游标.删除游标. 1.3.1声明游标 最简单游标声明:DECLARE <游标名>CURSOR FOR<SELECT语句>: 其中select语句可以是简单查询,也可以是复杂的接连查询和嵌套查询 例子: [已表2 AddSalary为例子] Declare mycursor cursor for select *

MySQL 游标管理

在理解了Oracle上的游标之后,再去翻MySQL中关于游标的说明,发现这块讲得比较简单,用一个例子来说明就能理解MySQL游标的使用方法. 游标的使用分为4步:分别是打开游标(open).游标循环(loop,leave).提取数据(fetch).关闭游标(close). 这里使用了Mysql官方文档(5.5)中的例子: CREATE PROCEDURE curdemo() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE a CHAR(16); DEC

MySQL游标操作指南

本篇文章是对MySQL游标的具体使用进行了详细的分析介绍,需要的朋友参考下 测试表 level  代码如下: create table test.level (name varchar(20)); 再 insert 些数据 ; 初始化 代码如下: drop procedure if exists useCursor // 建立 存储过程 create 代码如下: CREATE PROCEDURE useCursor() BEGIN 局部变量的定义 declare 代码如下: declare tm

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: &quot;Too many connections&quot;

最简单的办法是因为你的my.ini中设定的并发连接数太少或者系统繁忙导致连接数被占满解决方式:打开MySQL安装目录打开MY.INI找到max_connections默认是100 .--实例 WINDOWS解决mysql Errno.: 1040错误XXXX info: Can not connect to MySQL server User: rootTime: 2004-5-20 3:00pmScript: /XXXX/XXXX.PHP Error: Too many connections

MySQL游标的简单实践

Q:为什么要使用游标? A: 在存储过程(或函数)中,如果某条select语句返回的结果集中只有1行,可以使用select into语句(上几篇博客有介绍到用法)来得到该行进行处理:如果结果集中有多行,简单的select语句成批地进行处理,需要在检索出来的行中前进或后退一行或多行--若是想得到其中的每一行进行处理,就必须使用游标. Q:什么是游标? A: 游标(cursor),是一个存储在MySQL服务器上的数据库查询,游标不是一条 SELECT语句,而是被该语句检索出来的结果集:可以看做是指向

前段时间,接手一个项目使用的是原始的jdbc作为数据库的访问,发布到服务器上在运行了一段时间之后总是会出现无法访问的情况,登录到服务器,查看tomcat日志发现总是报如下的错误。    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected est

前段时间,接手一个项目使用的是原始的jdbc作为数据库的访问,发布到服务器上在运行了一段时间之后总是会出现无法访问的情况,登录到服务器,查看tomcat日志发现总是报如下的错误. Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too man

MySQL游标的使用

MySQL游标的使用 A simple cursor of mysql step1: 新建表tb_test; create table tb_test( id int ); insert into tb_test values ('1'); insert into tb_test values ('2'); insert into tb_test values ('3'); step2: 声明存储过程sp_test; delimiter $$ create procedure sp_test()

使用mysql 游标,快速删除子节点及其附属节点

上篇,我写的是如何用数据存储,并通过html展示出树形的结构, 本篇我将讲述,如何通过存储过程,删除一个树节点及其附属节点.网上已经有非常多的关于mysql 游标使用的文章了, 为什么我还要写这篇文章呢,主要是想表达一些在软件设计领域的一些想法. 我不赞同在数据库中大量的使用存储过程, 因为我觉得随着软件系统的复杂度逐渐提高,维护的难度会逐渐的增大.而且大批量的使用存储过程,不利于后期通过分布式部署应用程序来解决日益增多的业务需求. 我推荐把存储过程用在处理一些不包含太多业务,批量操作数据的场景