mysql procedure-关于mysql5.6存储与游标的问题

问题描述

关于mysql5.6存储与游标的问题

如下是我的过程,不解的是当我把从游标里的任何一列当做判断结束游标条件时,无论何时它都为空,但它确确实实可以循环完,百思不得其解。
例如 WHILE ( TYPE IS NOT NULL ) 。 这里的type永远都为空。
再如果我将任意一列 , event_value 当做while 条件 event_value 同样为空。
在此跪求大鸟解答了。
DELIMITER $$
CREATE PROCEDURE test( IN event_value_name VARCHAR(20) , IN datestr VARCHAR(20) , IN start_date DATETIME , IN end_date DATETIME )
BEGIN
DECLARE temp VARCHAR(10) DEFAULT "";
DECLARE temps VARCHAR(200) DEFAULT "";
DECLARE report_tim VARCHAR(100) DEFAULT "";
DECLARE TYPE VARCHAR(50);
DECLARE event_value VARCHAR(50);
DECLARE source VARCHAR(50);
DECLARE event_name VARCHAR(50);
DECLARE COT VARCHAR(50);
DECLARE allrow CURSOR FOR SELECT tev.event_value,tev.source,tev.event_name,COUNT(*) AS COT,tev.type,DATE_FORMAT(tev.report_time,'%Y-%m-%d') report_tim FROM ts_event_value tev

WHERE tev.name=event_value_name AND tev.report_time BETWEEN start_date AND end_date
GROUP BY tev.event_value,tev.source,tev.event_name,tev.type,report_tim ORDER BY COT DESC LIMIT 15 ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET TYPE = NULL;
OPEN allrow;
/*allrowloop:LOOP*/
FETCH allrow INTO event_value,source,event_name,COT,TYPE,report_tim;
IF datestr = "all" THEN

        WHILE ( TYPE IS NOT NULL ) DO
            SELECT s.name INTO temp FROM statistical s WHERE s.name = event_value_name AND s.source = source AND s.event_name = event_name AND s.event_value = event_value AND s.zt = "all";

                IF temp = "" OR temp IS NULL THEN
                    INSERT INTO statistical VALUES (source,event_name,event_value,COT,event_value_name,report_tim,"all");
                ELSE
                    UPDATE statistical s SET s.cot = s.cot + COT WHERE s.name = event_value_name AND s.source = source AND s.event_name = event_name AND s.event_value = event_value AND s.zt = "all";
                END IF;

            FETCH allrow INTO event_value,source,event_name,COT,TYPE,report_tim;
        END WHILE;
    END IF;
COMMIT;
    SELECT event_value,source,event_name,COT,temp;
    /*SELECT temps;*/
    /*END LOOP allrowloop;*/
CLOSE allrow;

END;
$$
DELIMITER ;

时间: 2025-01-30 02:22:05

mysql procedure-关于mysql5.6存储与游标的问题的相关文章

【MySql】MySql存储,游标,循环的简单使用

MySql存储,游标,循环 CREATE PROCEDURE `copy_group`(IN v_sourcegroupid int,IN v_destgroupid int,IN v_projectid int) BEGIN       --声明变量       declare v_oldtestcaseid int;       declare v_testcaseid int;       declare v_stepid int;       declare v_id int;    

mysql案例:mysql5.6.14配置my.cnf多实例

mysql案例:mysql5.6.14配置my.cnf多实例,mysql_install_db初始化不读取my.cnf配置文件 1.1.1. mysql5.6.14多实例my.cnf时,初始化不读取my.cnf配置文件 [环境描述] 在多实例配置的/etc/my.cnf环境中,执行mysql_install_db后,启动Mysql报错. [操作步骤] /etc/my.cnf配置文件: [mysqld3307] innodb_data_file_path =ibdata1:1G:autoexten

《MySQL技术内幕:InnoDB存储引擎第2版》——1.3 MySQL存储引擎

1.3 MySQL存储引擎 通过1.2节大致了解了MySQL数据库独有的插件式体系结构,并了解到存储引擎是MySQL区别于其他数据库的一个最重要特性.存储引擎的好处是,每个存储引擎都有各自的特点,能够根据具体的应用建立不同存储引擎表.对于开发人员来说,存储引擎对其是透明的,但了解各种存储引擎的区别对于开发人员来说也是有好处的.对于DBA来说,他们应该深刻地认识到MySQL数据库的核心在于存储引擎. 由于MySQL数据库的开源特性,用户可以根据MySQL预定义的存储引擎接口编写自己的存储引擎.若用

查看mysql当前表使用的存储引擎(转)

说明:当我们创建表 "test"表时 CREATE TABLE test ( id INT(11) default NULL auto_increment, s char(60) default NULL, PRIMARY KEY(id) ENGINE=InnoDB; 一般情况这样没任何问题.但是,如果MySQL服务器配置中未启用InnoDB存储引擎.则在创建表 test 时,MySQL还是会自动选择默认的存储引擎MyISAM来创建test表.因为通过SHOW CREATE TABLE

MySQL · 专家投稿 · MySQL5.7 的 JSON 实现

介绍 本文将介绍 MySQL 5.7 中如何实现非结构化(JSON)数据的存储,在介绍 MySQL 5.7 的非结构化数据存储之前,首先介绍在之前的 MySQL 的版本中,用户如何通过 BLOB 实现 JSON 对象的存储,以及这样处理的缺点是什么,这些缺点也就是 MySQL 5.7 支持 JSON 的理由:然后我们介绍了 MySQL 5.7 如何支持 JSON 格式,本文将重点关注MySQL 5.7 JSON 的存储格式. 5.7 之前 BLOB 方式实现 JSON 对象的存储 MySQL 是

二进制-mysql 数据库中 blob 类型存储数字 无法正常插入更新

问题描述 mysql 数据库中 blob 类型存储数字 无法正常插入更新 事情是这样的,在Mysql数据库中有个字段是blob类型的,里面存放的是 8字节无符号整数, 类似于 33454690,45672389,这样一类数值,我使用select 语句select conv(hex(bc.DataTimeStamp) ,16,10) as DataTimestamp 是可以正常显示的,现在我想把 33454690 这个数字 查找出来,加1,变为 33454691,再存放回去. 使用语句 inser

mysql master.info 密码明文存储

问题描述 mysql master.info 密码明文存储 mysql master.info 密码明文存储,现在不让明文存储,有啥招解决! 解决方案 .....加密就好了...master.info 密码写成加密后的密码...连接的时候 在解密出来连接 解决方案二: 将密码用MD5转换,存入DB.就可以. 只是比较麻烦的一点,当用户忘记密码而修改密码,就将其变为空.然后用户重新写一个pwd.

php mysql procedure实现获取多个结果集的方法【基于thinkPHP】_php技巧

本文实例讲述了php mysql procedure实现获取多个结果集的方法.分享给大家供大家参考,具体如下: protected function getRs($id) { $db = new mysqli(C("DB_HOST"), C("DB_USER"), C("DB_PWD"), C("DB_NAME"), C("DB_PORT")); if (mysqli_connect_errno()) th

《MySQL技术内幕:InnoDB存储引擎第2版》——1.6 小结

1.6 小结 本章首先介绍了数据库和数据库实例的定义,紧接着分析了MySQL数据库的体系结构,从而进一步突出强调了"实例"和"数据库"的区别.相信不管是MySQL DBA还是MySQL的开发人员都应该从宏观上了解了MySQL体系结构,特别是MySQL独有的插件式存储引擎的概念.因为很多MySQL用户很少意识到这一点,这给他们的管理.使用和开发带来了困扰. 本章还详细讲解了各种常见的表存储引擎的特性.适用情况以及它们之间的区别,以便于大家在选择存储引擎时作为参考.最后