存储过程加事件调度器

-- 存储过程 (多个)游标的使用  临时表的使用(让执行时间从一个小时降低到5分钟)
DELIMITER $$
DROP PROCEDURE IF EXISTS `eval_calc_badge_achivement`$$
CREATE DEFINER=`dbmaster`@`%` PROCEDURE `eval_calc_badge_achivement`()
proc_label:BEGIN DECLARE v_currentPeriodId VARCHAR(100); -- 当前学期ID
DECLARE v_studentId VARCHAR(100);
DECLARE v_studentName TEXT CHARACTER SET utf8 DEFAULT '';
DECLARE v_studyCode VARCHAR(100);
DECLARE v_groupName TEXT CHARACTER SET utf8 DEFAULT '';
DECLARE v_gradeName TEXT CHARACTER SET utf8 DEFAULT '';
DECLARE v_periodCountBagdeSum INT;
DECLARE v_periodPCBagdeSum INT;
DECLARE v_periodGPA DOUBLE;
DECLARE v_badgeAchivement TEXT CHARACTER SET utf8 DEFAULT '';
DECLARE v_requireCountBadgeSum INT;
DECLARE v_requirePCBagdeSum INT;
DECLARE v_requireGPA DOUBLE;
DECLARE done INT DEFAULT 0; DECLARE cur_stu CURSOR FOR SELECT bas.id,bas.name,bas.studyCode,g.Name,grade.Name FROM bas_Student bas LEFT JOIN bas_group g ON bas.groupId=g.id LEFT JOIN bas_grade grade ON bas.gradeId=grade.id WHERE bas.IsLeaved=0;
DECLARE cur_rule CURSOR FOR SELECT BadgeRequiredNumber,PCBadgeRequiredNumber,GPARequired,AchievementName FROM eval_badgestatsrule WHERE periodid=v_currentPeriodId ORDER BY BadgeRequiredNumber DESC,PCBadgeRequiredNumber DESC,GPARequired DESC;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
SELECT id INTO v_currentPeriodId FROM bas_schoolperiod WHERE IsCurrentPeriod=1; DROP TABLE IF EXISTS eval_processevaldetail_tmp;
CREATE TEMPORARY TABLE IF NOT EXISTS eval_processevaldetail_tmp (
StudentId VARCHAR(50) NOT NULL,
totalBadgeCount INT
);
CREATE INDEX eval_processevaldetail_tmp_stuid ON eval_processevaldetail_tmp (StudentId); TRUNCATE TABLE eval_processevaldetail_tmp;
INSERT INTO eval_processevaldetail_tmp SELECT studentId,SUM(CalculateBadgeCount+ExtraBadgeCount) AS totalBadgeCount FROM eval_processevaldetail WHERE CourseGroupid IN (SELECT id FROM `csh_coursegroup` WHERE schoolperiodid=v_currentPeriodId) GROUP BY studentId; OPEN cur_stu;
REPEAT
FETCH cur_stu INTO v_studentId, v_studentName,v_studyCode,v_groupName,v_gradeName;
IF NOT done THEN SELECT SUM(badgeCount) INTO v_periodPCBagdeSum FROM `cp_studentscore` WHERE studentid=v_studentId AND cpperiodCourseid IN (SELECT id FROM `cp_periodcourse` WHERE schoolperiodid=v_currentPeriodId);
SELECT (v_periodPCBagdeSum+(SELECT totalBadgeCount FROM eval_processevaldetail_tmp WHERE studentid=v_studentId )) INTO v_periodCountBagdeSum; SELECT ROUND(SUM(ScoreGPA)/ SUM(Credit),2) INTO v_periodGPA FROM Eval_SectionEval WHERE StudentId=v_studentId AND SchoolPeriodId=v_currentPeriodId; IF (v_periodCountBagdeSum IS NULL)THEN SELECT 0 INTO v_periodCountBagdeSum;END IF;
IF (v_periodPCBagdeSum IS NULL)THEN SELECT 0 INTO v_periodPCBagdeSum;END IF;
IF (v_periodGPA IS NULL)THEN SELECT 0 INTO v_periodGPA;END IF; OPEN cur_rule;
REPEAT
FETCH cur_rule INTO v_requireCountBadgeSum, v_requirePCBagdeSum,v_requireGPA,v_badgeAchivement; IF (v_periodCountBagdeSum>=v_requireCountBadgeSum && v_periodPCBagdeSum>=v_requirePCBagdeSum && v_periodGPA>=v_requireGPA)THEN
INSERT INTO `eval_studentachievement_history` (`Id`,`PeriodId`,`StudentId`,`Grade`,`StudentGroup`,`StudyCode`,`StudentName`,`BadgeNumber`,`PCBadgeNumber`,`ScoreGPA`,`AchievementName`,`CreatedTime`,`UpdateTime`) VALUES(UUID(),v_currentPeriodId,v_studentId,v_gradeName,v_groupName,v_studyCode,v_studentName,v_periodCountBagdeSum,v_periodPCBagdeSum,v_periodGPA,v_badgeAchivement,NOW(),NOW());
INSERT INTO dolog (id) VALUES (v_studentId);
IF (SELECT COUNT(*) FROM eval_studentachievement WHERE StudentId=v_studentId)>0 THEN
UPDATE eval_studentachievement SET PeriodId=v_currentPeriodId,Grade=v_gradeName,StudentGroup=v_groupName,BadgeNumber=v_periodCountBagdeSum,PCBadgeNumber=v_periodPCBagdeSum,ScoreGPA=v_periodGPA,AchievementName=v_badgeAchivement,UpdateTime=NOW() WHERE StudentId=v_studentId;
ELSE
INSERT INTO eval_studentachievement (`Id`,`PeriodId`,`StudentId`,`Grade`,`StudentGroup`,`StudyCode`,`StudentName`,`BadgeNumber`,`PCBadgeNumber`,`ScoreGPA`,`AchievementName`,`CreatedTime`,`UpdateTime`) VALUES(UUID(),v_currentPeriodId,v_studentId,v_gradeName,v_groupName,v_studyCode,v_studentName,v_periodCountBagdeSum,v_periodPCBagdeSum,v_periodGPA,v_badgeAchivement,NOW(),NOW());
END IF; SET done=1;
END IF;
UNTIL done END REPEAT;
CLOSE cur_rule;
SET done=0;
END IF; UNTIL done END REPEAT;
CLOSE cur_stu;
END proc_label$$ DELIMITER ; CALL eval_calc_badge_achivement();

Mysql计划任务事件调度器的使用

SELECT @@event_scheduler; -- 查看事件调度器状态
SET GLOBAL event_scheduler = 0; -- 关闭
SET GLOBAL event_scheduler = 1; -- 打开 CREATE EVENT IF NOT EXISTS event_eval_stu_Achievement
ON SCHEDULE
EVERY 1 DAY STARTS '2016-07-01 0:30:00'
DO CALL eval_calc_badge_achivement(); -- 创建 DROP EVENT IF EXISTS event_eval_stu_Achievement; -- 删除

mysql存储过程游标加计划任务事件调度器的更多相关文章

  1. MySQL计划任务(事件调度器)(Event Scheduler)

    http://www.cnblogs.com/c840136/articles/2388512.html https://dev.mysql.com/doc/refman/5.7/en/events- ...

  2. MySQL计划任务(事件调度器)(Event Scheduler)[转]

    原文链接: http://www.cnblogs.com/c840136/articles/2388512.html MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件.定时任务机 ...

  3. MySQL计划任务(事件调度器)

    原文:http://www.cnblogs.com/c840136/articles/2388512.html 备忘; MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件.定时任务 ...

  4. mysql事件调度器功能

    一.前言 自MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录.对数据进行汇总等等),来取代原先只能由操作系 ...

  5. MySQL事件调度器event的使用

    Q:假设,有一个需求,希望在某一个时刻系统调用一个begin end执行一下:十分钟以后执行一下begin end.亦或有一个需求,每个多长时间周期性执行begin end.那么这个时候该怎么办呢? ...

  6. MySQL事件调度器Event Scheduler

    我们都知道windows的计划任务和linux的crontab都是用来实现一些周期性的任务和固定时间须要运行的任务. 在mysql5.1之前我们完毕数据库的周期性操作都必须借助这些操作系统实现. 在m ...

  7. mysql 事件调度器

    1.mysql事件调度器,也就是计划任务,计划做某事,有两种方式: 2.在某个时间点做某事,AT TIMESTAMP [+ INTERVAL INTERVAL] 某个时间点加上偏移. 3.定时地做某事 ...

  8. mysql事件调度器定时删除binlog

    MySQL5.1.6起Mysql增加了事件调度器(Event Scheduler),可以用做定时执行某些特定任务,来取代原先只能由Linux操作系统的计划任务来执行的工作MySQL的事件调度器可以精确 ...

  9. MySQL的事件调度器

    自MySQL5.1.0起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务,可以看作基于时间的触发器. 一.开启 事件调度默认是关闭的,开启可执行 ...

随机推荐

  1. SQL事务对并发处理的支持

    前言 继上次技术分享后,学到了关于mysql事务的许多新知识,感觉还是蛮有收获的.后来反过来想想,这些东西其实我们都接触过,最起码在自学考试的数据库系统原理那本书里面对事务的讲解,在里面就提到了事务的 ...

  2. Java基础之开发工具Eclipse的使用

    Eclipse简介 Eclipse是由IBM公司投资4000万美元开发的集成开发工具.它是目前最流行的Java集成开发工具之一,基于Java语言编写,并且是开放源代码的.可扩展的(Integrated ...

  3. Windows Server 2016 IIS10安装URLRewrite 2.0组件方法

    1,打开Regedit> HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ InetStp2,编辑“MajorVersion”并以十进制设置数值数据值为93 ...

  4. GIS有关GP服务的发布和调用

    打印服务范例:http://blog.csdn.net/jingxinwjb/article/details/51906464 1.通过Modelbuilder新建工具.(注意:假如工具输出两个以上的 ...

  5. EXPEDI - Expedition 优先队列

    题目描述 A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rathe ...

  6. Palindromes _easy version(reverse)

    Problem Description “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串.请写一个程序判断读入的字符串是否是“回文”.   Input 输入包 ...

  7. 下载GitHub仓库的某个子文件夹

    http://downgit.zhoudaxiaa.com/#/home

  8. 江西财经大学第一届程序设计竞赛 E

    链接:https://www.nowcoder.com/acm/contest/115/E来源:牛客网 题目描述 当你的好友给你发来一条消息,你的消息列表上就会置顶显示该好友的名字以及该好友发给你的消 ...

  9. 上传文件中文文件名乱码的解决方法以及iconv函数的使用

    http://www.jb51.net/article/14530.htm 一般客户端是什么格式就展示什么格式,比如浏览器的UTF-8,windows的GBK

  10. springMvc使用restful风格

    转载:https://blog.csdn.net/weide_java/article/details/53793769 1,REST架构师一个抽象的概念,目前主要是基于HTTP协议实现,其目的是为了 ...