DELIMITER $$
USE `fdtdata`$$
DROP PROCEDURE IF EXISTS `fn_ev_PerformaceMessage02`$$
CREATE DEFINER=`root`@`%` PROCEDURE `fn_ev_PerformaceMessage02`(p_time DATETIME,p_AgentId VARCHAR(64))
BEGIN
-- p_time 必须是一个年月日的时间/*局部变量的定义 declare*/ DECLARE tempStudentId VARCHAR(64) DEFAULT NULL ;DECLARE tempSubjectId INT;DECLARE tempAve DECIMAL(18,2);DECLARE tempTime DATETIME;DECLARE tempLowMe INT;       -- 同一个科目下,比我低的学生个数DECLARE tempAllStudent INT;    -- 同一个科目下,所有的学生的个数 DECLARE tempPercent DECIMAL(18,2);   -- tempLowMe/tempAllStudentDECLARE ConstGood FLOAT DEFAULT 0.90; -- 设置比多少优秀高?DECLARE returnStr TEXT;
DECLARE cur1 CURSOR FOR  SELECT c.`StudentId`,c.`SubjectId` ,CAST(AVG(p.`AveScore`) AS DECIMAL(18,2)) AS ave
FROM `tb_fdt_courseitem` c INNER JOIN `tb_fdt_performance` p
ON c.`CourseItemId`=p.`CourseItemId`
WHERE c.`StartDate`>= p_time AND c.`EndDate` <DATE_ADD(p_time,INTERVAL 1 DAY)  AND c.`AgentId`=p_AgentId
GROUP BY studentid,subjectid
ORDER BY studentid;/*    mysql 用异常来判断是不是已经跳出了循环,把 游标 异常后 捕捉 ,并设置 循环使用 变量 tmpname 为 null 跳出循环。          */
DECLARE CONTINUE HANDLER FOR  NOT FOUND SET tempStudentId = NULL;DROP TEMPORARY TABLE IF EXISTS tmp_dingshi_PerformaceMessage;
CREATE TEMPORARY TABLE tmp_dingshi_PerformaceMessage
-- 获得某一天,学生的id和科目的id,已经自己在这个科目的平均分
SELECT c.`StudentId`,c.`SubjectId` ,CAST(AVG(p.`AveScore`) AS DECIMAL(18,2)) AS ave
FROM `tb_fdt_courseitem` c INNER JOIN `tb_fdt_performance` p
ON c.`CourseItemId`=p.`CourseItemId`
WHERE c.`StartDate`>= p_time AND c.`EndDate` <DATE_ADD(p_time,INTERVAL 1 DAY)  AND c.`AgentId`=p_AgentId
GROUP BY studentid,subjectid
ORDER BY studentid;/*开游标*/ OPEN cur1;/*游标向下走一步*/ FETCH cur1 INTO tempStudentId,tempSubjectId,tempAve;/* 循环体 这很明显 把游标查询出的 name 都加起并用 ; 号隔开 */WHILE ( tempStudentId IS NOT NULL) DO-- select tempStudentId,tempSubjectId,tempAve;SET tempLowMe= (SELECT COUNT(*) FROM tmp_dingshi_PerformaceMessage  WHERE ave<(tempAve) AND subjectid=tempSubjectId);SET tempAllStudent=(SELECT COUNT(*) FROM tmp_dingshi_PerformaceMessage WHERE subjectid=tempSubjectId);SET tempPercent=tempLowMe/tempAllStudent;SELECT tempStudentId,tempSubjectId,tempAve,tempLowMe,tempAllStudent,tempPercent;IF(tempPercent>=ConstGood) THEN  -- 如果比自己差的有19个人,一共20个人,那么19/20=95% 就是比95%的要高CALL fn_ev_PerformaceMessage03(tempStudentId,tempSubjectId);END IF;/*游标向下走一步*/ FETCH cur1 INTO tempStudentId,tempSubjectId,tempAve;END WHILE;CLOSE cur1;
SELECT returnStr;END$$
DELIMITER ;

mysql 游标 ,嵌套游标相关推荐

  1. mysql存储过程在实际开发中怎么用_MYSQL存储过程开发中怎么使用游标嵌套

    mysql存储过程开发中如何使用游标嵌套 在实际业务逻辑开发中,难免用到游标嵌套,举例如下: delimiter // drop procedure if exists good_nested_cur ...

  2. mysql cursor 嵌套_MYSQL 存储过程多游标嵌套遍历

    mysql 存储过程临时表.多游标嵌套使用样例: CREATE PROCEDURE method(IN start_Code varchar(10),IN end_Code varchar(10),i ...

  3. MySql 循环执行语句,循环执行update,详细介绍【游标嵌套】

    今天在工作的时候,遇到一个需求. 需要去把一个字段(原本是uuid),改成00001,00002,这样的格式.如果是数据比较少当然无所谓了,但是表里面有上千条数据,这个时候再去手动修改就不科学了. 本 ...

  4. mysql while 游标_mysql 游标 loop while 的使用

    项目需求:对表进行重新构建,这个用java的缺点是数据的传送以及遍历的话会消耗更多的资源,因此使用mysql的存储过程进行构建. 具体要求:跳过原本设置的假期和课程本身的假期对数据进行重排. 1.游标 ...

  5. MS SQL Server2005存储过程、游标、游标嵌套综合例子

    MS SQL Server2005存储过程.游标.游标嵌套综合例子: 放在这里备忘>>> Java代码 create proc decisionPathRefSchemes as b ...

  6. 什么是mysql的游标_MySQL游标概念是什么 MySQL游标概念与用法介绍

    本篇文章小编给大家分享一下MySQL游标概念与用法介绍,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 1.游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接 ...

  7. 嵌套游标以生成复杂的报表

    --以下示例显示如何嵌套游标以生成复杂的报表.为每个供应商声明内部游标 SET NOCOUNT ON DECLARE @vendor_id int, @vendor_name nvarchar(50) ...

  8. oracle 嵌套游标慢,oracle 嵌套游标以及java,oracle的时间处理

    oracle 嵌套游标以及java,oracle的时间处理 create or replace procedure test is ids VOD_CMS_OPERATION_REGION.id%ty ...

  9. mysql 游标 navigate_MySQL游标的概念介绍和游标的使用讲解

    一.MySQL游标的概念 1.游标介绍 MySQL的游标(cursor)是一个重要的概念,通过查找资料与自己的理解,主要得出以下几点关于自己的理解. 有数据缓冲的思想:游标的设计是一种数据缓冲区的思想 ...

最新文章

  1. 努比亚红魔有人脸识别_魅族魅蓝6T、努比亚红魔Mars电竞手机、华为畅享10Plus对比...
  2. DbHelper数据操作类,DbProviderFactories
  3. 小项目--bank1
  4. mac os 安装 thrift
  5. 类如何调用自己的私有成员_企业如何快速获取自己的私有领域流量?
  6. 网络安全工程师必备浏览器插件
  7. win10 appdata文件夹在哪 隐藏文件夹appdata的打开方法
  8. 每月自评之一:2013年1月
  9. MyBatis入门到精通
  10. input不为空,且返回焦点
  11. 阿里云手机验证码获取接口【接口对接的时候要仔细把里面的参数换成自己的参数即可】
  12. Python 查看显存大小
  13. Zigbee HA 框架学习笔记
  14. PCI总线及发展历程(详细)总结
  15. Minio分布式集群部署(Swarm)
  16. 推荐:电脑蓝屏代码分析工具BlueScreenView简体中文版下载
  17. anaconda-navigaotr出现adding featured channels并无法正常打开_CodingPark编程公园
  18. 【20】WAV格式歌曲
  19. IP地址,域名,服务器
  20. 杰神之JAVA二维数组(案例:走迷宫)

热门文章

  1. Windows 能干而 Linux 干不了的事情,那就是不需要干的事情(转贴)
  2. Lighttpd 配置与性能优化
  3. 从玩具到游戏,另类的项目激励机制
  4. 剥开比原看代码08:比原的Dashboard是怎么做出来的?
  5. 数据库防火墙onefirewall,如何防范黑客物理删除?避免携程事件再次上演
  6. iOS 静态类库项目的建立与使用
  7. 重庆南岸召开总结会,今年将引进30家车联网企业
  8. linux 远程访问
  9. C# 实现单线程线程池并调用实例
  10. 交换机端口与mac_address的绑定