mysql里面不可以返回游标,很让人蛋疼,没oracle好,而且,mysql没有什么好的调试工具,也比较纠结.

下面是我写的一个mysql存储过程,里面使用到了游标,临时表,最终返回的是结果接,希望对大家有帮助:

DELIMITER $$

USE `realwar`$$

DROP PROCEDURE IF EXISTS `queryRemainsPoints`$$

CREATE DEFINER=`root`@`%` PROCEDURE `queryRemainsPoints`(

/*in startSize int,

in pageSize int,startSize,分页的起始位置,pageSize 分页的大小,

in queryUserName varchar(100),/*queryUserName根据用户名字来查找,

in remainP int,

in remainP1 INT,/*remainP 用户剩余军饷小,remainP1剩余军饷大

in sumP int,

IN sumP1 int, payP 用户充值总额小,payP 总金额大

in rats int ,

in rats1 int滞留率查询*/

)

BEGIN

DECLARE userNames VARCHAR(50);

DECLARE nickName VARCHAR(50);

DECLARE sumPoints INT;

DECLARE remainPoint INT;

DECLARE dayPay INT DEFAULT 0;

DECLARE dayCost INT;

DECLARE sumCost INT;

DECLARE dayRemainRats VARCHAR(50);

DECLARE sumRemainRats VARCHAR(50);

DECLARE    over INT DEFAULT 0;

/*定义一个游标,获得所有的用户*/

/*if(queryUserName is not null){

DECLARE usernameCur FOR SELECT rp.username AS userName FROM realwar_tool.play_money_pay_log rp where rp.username=queryUserName GROUP BY (rp.username);

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET userName = NULL;

}else{

DECLARE usernameCur CURSOR FOR SELECT rp.username AS userName FROM realwar_tool.play_money_pay_log rp GROUP BY (rp.username);

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET userName = NULL;*/

DECLARE usernameCur CURSOR FOR SELECT rp.username  FROM realwar_tool.play_money_pay_log rp GROUP BY (rp.username);

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET userNames = NULL;

/*创建一个临时表,用来存放数据*/

DROP  TABLE IF EXISTS realwar.temp_remainsPoints;

CREATE TEMPORARY TABLE realwar.temp_remainsPoints(

sid INT(10) PRIMARY KEY AUTO_INCREMENT,

userName1 VARCHAR(100),

nickName1 VARCHAR(100),

sumPoints1 INT(10),

remainPoints1 INT(10),

dayPay1  INT(10),

dayCost1 INT(10),

dayRemainRats1 VARCHAR(10),

sumRemainRats1 VARCHAR(10)

);

OPEN usernameCur;/*打开游标*/

/*usernameCur:loop */

FETCH usernameCur INTO userNames;/*循环游标,给userName赋值*/

WHILE(userNames IS NOT NULL) DO

/*玩家昵称*/

SELECT (rp.nickName) INTO nickName  FROM realwar.playbaseinfo rp WHERE rp.UserName = userNames;

/*今日充值军饷*/

SELECT SUM(r1.change_money)*10 INTO dayPay FROM realwar_tool.play_money_pay_log r1 WHERE r1.username=userNames AND YEAR(FROM_UNIXTIME(r1.dateline)) = YEAR(SYSDATE())

AND MONTH(FROM_UNIXTIME(r1.dateline)) = MONTH(SYSDATE()) AND DATE(FROM_UNIXTIME(r1.dateline)) = DATE(SYSDATE());

IF(dayPay  IS NULL) THEN

SELECT 0 INTO dayPay FROM DUAL;

END IF;

/*用户总充值军饷或消费券*/

SELECT SUM(r1.change_money*10) INTO sumPoints FROM realwar_tool.play_money_pay_log  r1 WHERE r1.username = userNames;

IF (sumPoints IS NULL) THEN

SELECT 0 INTO sumPoints FROM DUAL;

END IF;

/*今日花费军饷或消费券*/

SELECT SUM(t1.price) INTO dayCost  FROM realwar.t_consumption t1 WHERE t1.userName = userNames  AND YEAR(STR_TO_DATE(t1.consumDate,'%Y-%m-%d %H:%i:%s')) = YEAR(SYSDATE())

AND MONTH(STR_TO_DATE(t1.consumDate,'%Y-%m-%d %H:%i:%s')) = MONTH(SYSDATE()) AND DATE(STR_TO_DATE(t1.consumDate,'%Y-%m-%d %H:%i:%s')) = DATE(SYSDATE());

IF (dayCost IS NULL) THEN

SELECT 0 INTO dayCost FROM DUAL;

END IF;

/*用户总花费军饷或消费券*/

SELECT SUM(t2.price) INTO sumCost FROM realwar.t_consumption t2 WHERE t2.userName = userNames;

IF (sumCost IS NULL) THEN

SELECT 0 INTO sumCost FROM DUAL;

END IF;

/*今日滞留*/

IF(dayPay!=0) THEN

SELECT FLOOR((dayPay-dayCost)/dayPay*100) INTO dayRemainRats FROM DUAL;

ELSE

SELECT 0 INTO dayRemainRats FROM DUAL;

END IF;

/*总滞留*/

IF(sumPoints!=0)THEN

SELECT FLOOR((sumPoints-sumCost)/sumPoints*100) INTO sumRemainRats FROM DUAL;

ELSE

SELECT 0 INTO sumRemainRats FROM DUAL;

END IF;

/*将得到的值,循环的插入到临时表中*/

INSERT INTO temp_remainsPoints SET userName1=userNames,nickName1= nickName,sumPoints1= sumPoints,

remainPoints1= (sumPoints-sumCost),dayPay1 = dayPay,dayCost1= dayCost,dayRemainRats1 = dayRemainRats,sumRemainRats1= sumRemainRats;

FETCH usernameCur INTO userNames;/*循环游标,给userName赋值*/

END WHILE;

/*end loop;*/

CLOSE usernameCur;

/*返回的结果集*/

SELECT userName1,nickName1,sumPoints1,remainPoints1,dayPay1,dayCost1,dayRemainRats1,sumRemainRats1

FROM temp_remainsPoints;

END$$

DELIMITER ;

mysql 游标 时间类型_mysql 游标类型相关推荐

  1. c mysql日期时间格式_mysql日期和时间类型

    TIME 类型 TIME 类型用于只需要时间信息的值,在存储时需要 3 个字节.格式为 HH:MM:SS.HH 表示小时,MM 表示分钟,SS 表示秒. TIME 类型的取值范围为 -838:59:5 ...

  2. mysql 数据库 数组类型转换_mysql数字类型的数据如何进行转换?

    如何将MySQL数据库中的数字类型转换为数字函数,今天给大家介绍mysql中的转换函数,这个在实际的生活应用中是运用广泛的,大大减少了我们自己手动进行数字类型的转换. 我们今天主要向大家介绍的是用My ...

  3. mysql完整字段包括_MySQL字段类型最全解析

    前言: 要了解一个数据库,我们必须了解其支持的数据类型.MySQL 支持大量的字段类型,其中常用的也有很多.前面文章我们也讲过 int 及 varchar 类型的用法,但一直没有全面讲过字段类型,本篇 ...

  4. mysql密码字段类型_MySQL 字段类型

    数值 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数. 许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定 ...

  5. mysql字符类型_MYSQL字符类型大全

    ============= MySQL数据类型 ============= 整数类型 ======== 整数类型 字节数 无符号范围 有符号的范围 TINYINT 1 0~255 -128~127 S ...

  6. mysql密码字段类型_MySQL字段类型最全解析

    **前言:** 要了解一个数据库,我们必须了解其支持的数据类型.MySQL 支持大量的字段类型,其中常用的也有很多.前面文章我们也讲过 int 及 varchar 类型的用法,但一直没有全面讲过字段类 ...

  7. mysql 空间 类型_MySQL空间类型测试

    Mysql空间类型介绍: MySQL支持空间扩展,允许生成.保存和分析地理特征.这些特征可用于MyISAM.InnoDB.NDB.BDB和ARCHIVE表(但是,ARCHIVE引擎不支持索引功能,因此 ...

  8. mysql begin end 用法_MySQL ------ 游标(CURSOR)(二十六)

    MySQL执行检索操作会返回一组称为结果集的行,这组返回的行都是与SQL 语句相匹配的行(零行或多行),但是,使用简单的select 语句,没有办法得到第一行.下一行.或前十行,也不存在一行地处理所有 ...

  9. mysql 表 类型_mysql表类型

    MySQL支持6种不同的表类型:BDB.InnoDB.HEAP.ISAM.MERGE以及MyISAM.其中 BDB,InnoDB单独属于一类,称为"事务安全型"(transacti ...

最新文章

  1. 面试:你了解中兴吗_HTTP简介:您需要了解的所有内容
  2. 独家 | 2018年Analytics Vidhya上最受欢迎的15篇数据科学和机器学习文章
  3. 边缘数据中心维护的4个基本组件
  4. 【深度学习】Tensorflow搭建卷积神经网络实现情绪识别
  5. Java Jackson源码研究 - how is class member attribute information is parsed by Serializer
  6. 一个还算简单的微信消息SDK(基于.Net Standard 2.0)
  7. jQuery:从零开始,DIY一个jQuery(2)
  8. 树上倍增求LCA及例题
  9. 网络查找文档比自己电脑上还方便?
  10. java微信小程序解密AES/CBC/PKCS7Padding
  11. 使用Pixel Bender Toolkit制作特效——给过滤器增加参数(Part 3)
  12. CSS实验案例01QQ会员页面导航
  13. 什么是存储过程,存储过程的作用及优点
  14. html怎么把正方形改成圆形,css中如何把正方形变成圆形
  15. 红帽linux安装要钱吗,红帽linux安装
  16. 多账号统一登陆,账号模块的系统设计
  17. CentOS7安装配置Tomcat9
  18. Python商品数据预处理与K-Means聚类可视化分析
  19. libreCAD源码阅读笔记1
  20. bibtex类型以及格式要求

热门文章

  1. CQ18阶梯赛第二场
  2. Vue2项目练习|电商网站问题总结
  3. NAACL 2019开源论文:基于胶囊网络的知识图谱完善和个性化搜索
  4. 《Qt-OpenGL系列编程》课程学习记录(1):相关概念、VAO、VBO、绘制三角形、使用OpenGL原生方式编译链接着色器程序
  5. 网易严选库存中心设计实践
  6. java-net-php-python-jsp废旧物资回收管理系统计算机毕业设计程序
  7. android o android8.0 startforegroundservice startforegroundservice() did not then call service.star
  8. Java中对this的理解
  9. 模型评价ROC\AUC\查准率\查全率\F-score\混淆矩阵\KS曲线\PR曲线等
  10. HexyBuddy:海克斯棋程序 Hexy 的逆向工具