mysql5.6以上版本,使用存储过程和函数实现定时计算任务
一,计算公式表(解析p0[-1]+p1[-1]+p2[-1] )
ms_indi_id | ms_no | indi_no | cal_foumal |
---|---|---|---|
1202 | T001 | C037 | p0[-1]+p1[-1]+p2[-1] |
ms_indi_id | level | parma_code | parma_val |
---|---|---|---|
1202 | 1 | p0 | T001.C066 |
1202 | 1 | p1 | T001.C068 |
1202 | 1 | p2 | T001.C067 |
二,写一个定时器,定时调用计算的存储过程
略
三,计算存储过程
DELIMITER $$
USE `ies`$$
DROP PROCEDURE IF EXISTS `p_up_calculate_cursor_new`$$
CREATE DEFINER=`dept`@`%` PROCEDURE `p_up_calculate_cursor_new`()
BEGIN
/**********************************************************************************************************/
/*名称: p_up_calculate_cursor_new */
/*实现功能 : 统计计算公式数据,并插入到实时表,更新状态表 */
/*功能说明:根据计算公式,计算数据,并把计算结果插入到实时表r-data_curr,更新到r_status_curr */
/*逻辑说明:level_id 计算公式等级,从1级开始计算,然后计算2级,以此类推 */
/*创建时间: 2019-12-20 */
/*创建人: 胡海江 */
/**********************************************************************************************************/
-- DECLARE level_id INT ;
-- DECLARE num INT default 1;
DECLARE v_dtEndTime DATETIME DEFAULT ADDDATE(DATE_FORMAT(NOW(),'%Y-%m-%d %H:00:00'),INTERVAL FLOOR(MINUTE(NOW())/15)*15 MINUTE);
DECLARE v_dtStartTime DATETIME DEFAULT SUBDATE(v_dtEndTime,INTERVAL 15 MINUTE)