ROP PROCEDURE IF EXISTS `proc__gl`;
DELIMITER // CREATE PROCEDURE `proc__gl` () BEGIN DECLARE waringcount int; DECLARE waringcountnoread int; DECLARE noticecount int; DECLARE noticecountnoread int; DECLARE gs_id int; DECLARE s int DEFAULT 0; DECLARE ceshi int DEFAULT 0;
//声明游标 DECLARE cursor_notic CURSOR FOR SELECT A1.waringcount AS temp_waringcount, A1.waringcountnoread AS temp_waringcountnoread, A1.noticecount AS temp_noticecount, A1.noticecountnoread AS temp_noticecountnoread, A1.gs_id AS temp_gs_id FROM ( SELECT a.gs_name, a.gs_id, SUM( CASE WHEN a.type = '预警信息' THEN 1 ELSE 0 END ) AS waringcount, SUM( CASE WHEN a.type = '预警信息' AND a.isread = 0 THEN 1 ELSE 0 END ) AS waringcountnoread, SUM( CASE WHEN a.type = '公告信息' THEN 1 ELSE 0 END ) AS noticecount, SUM( CASE WHEN a.type = '公告信息' AND a.isread = 0 THEN 1 ELSE 0 END ) AS noticecountnoread FROM t a GROUP BY a.gs_id ) A1 JOIN ( SELECT b.gsnameId FROM t1 b GROUP BY b.gsnameId ) A2 ON A1.gs_id = A2.gsnameId ; #设置一个终止标记 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s = 1 ; OPEN cursor_notic; #获取游标当前指针的记录,读取一行数据并传给变量waringcount,等等 FETCH cursor_notic INTO waringcount, waringcountnoread, noticecount, noticecountnoread, gs_id; #开始循环,判断是否游标已经到达了最后作为循环条件 while s <> 1 DO SELECT zsgl.gsnameId into ceshi from zs_saas_yunyingjiankong_gl_kehuguanli zsgl WHERE zsgl.gsnameId=gs_id; UPDATE t2 zsgl SET zsgl.waringcount = waringcount, zsgl.waringIsreadno = waringcountnoread, zsgl.noticcount = noticecount, zsgl.noticIsreadno = noticecountnoread WHERE zsgl.gsnameId = gs_id;
SELECT ceshi; FETCH cursor_notic INTO waringcount, waringcountnoread, noticecount, noticecountnoread, gs_id; END WHILE; CLOSE cursor_notic;
END//
DELIMITER ;