mysql 存储过程实现历史报警信息去重(只粘贴代码,不解释了)
2016-07-03 04:45
591 查看
BEGIN
DECLARE f1, f2, f3, f4, f5 ,f6 INT;
DECLARE Done INT DEFAULT 0;
DECLARE f11, f12, f13, f14, f15 ,f16 INT;
DECLARE result int DEFAULT 0;
DECLARE temp, temp1, temp2, temp3, temp4, temp5, temp6 int DEFAULT 0;
DECLARE record varchar(1000) DEFAULT '0';
DECLARE i int default 0;
DECLARE cur_alarm CURSOR FOR SELECT Fault0, Fault1, Fault2, Fault3, Fault4, Fault5 from bsmu_alarm where SaveTime like concat(time, '%' ) and rtu_id = id order by SaveTime asc;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
OPEN cur_alarm;
FETCH cur_alarm INTO f1, f2, f3, f4, f5,f6;
FETCH cur_alarm INTO f11, f12, f13, f14, f15,f16;
IF (f1+f2+f3+f4+f5+f6) > 0 THEN
while (i < 6 ) do
IF (i = 0) THEN SET
temp = f1;
END IF;
IF (i =1 ) THEN SET
temp = f2;
END IF;
IF (i =2 ) THEN SET
temp = f3;
END IF;
IF (i =3 ) THEN SET
temp = f4;
END IF;
IF (i =4 ) THEN SET
temp = f5;
END IF;
IF (i =5 ) THEN SET
temp = f6;
END IF;
SET record = CONCAT(record, temp);
IF temp & 0x8000 THEN
SET result = result + 1;
END IF;
IF temp & 0x4000 THEN
SET result = result + 1;
END IF;
IF (temp & 0x2000 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x1000 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0800 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0400 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0200 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0100 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0080 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0040 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0020 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0010 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0008 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0004 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0002 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0001 ) THEN
SET result = result + 1;
END IF;
SET i = i + 1;
END WHILE;
END IF;
SET i = 0;
alarm_loop: LOOP
IF done=1 THEN
LEAVE alarm_loop;
END IF;
IF (f1 = f11) and (f2 =f12 ) and (f3 = f13) and (f4 = f14 ) and (f5 = f15) and (f6 = f16 )THEN
SET f1 = f11;
SET f2 = f12;
SET f3 = f13;
SET f4 = f14;
SET f5 = f15;
SET f6 = f16;
FETCH cur_alarm INTO f11, f12, f13, f14, f15,f16;
SET record = CONCAT(record, '=' );
ELSE
while ( i < 6 ) do
IF (i = 0 ) THEN
SET temp = (~f1 & f11);
END IF;
IF (i = 1 ) THEN
SET temp = (~f2 & f12);
END IF;
IF (i = 2 ) THEN
SET temp = (~f3 & f13 );
END IF;
IF (i = 3 ) THEN
SET temp = (~f3 & f14 );
END IF;
IF (i = 4) THEN
SET temp = (~f5 & f15);
END IF;
IF (i = 5 ) THEN
SET temp = (~f6 & f16 );
END IF;
SET record = CONCAT(record, temp);
<
4000
/span>IF temp & 0x8000 THEN
SET result = result + 1;
END IF;
IF temp & 0x4000 THEN
SET result = result + 1;
END IF;
IF (temp & 0x2000 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x1000 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0800 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0400 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0200 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0100 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0080 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0040 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0020 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0010 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0008 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0004 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0002 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0001 ) THEN
SET result = result + 1;
END IF;
SET i = i + 1;
END WHILE;
SET i = 0;
SET f1 = f11;
SET f2 = f12;
SET f3 = f13;
SET f4 = f14;
SET f5 = f15;
SET f6 = f16;
FETCH cur_alarm INTO f11, f12, f13, f14, f15,f16;
END IF;
END LOOP alarm_loop;
CLOSE cur_alarm;
select time, result, record;
END
BEGIN
DECLARE f1, f2, f3, f4, f5 ,f6 INT;
DECLARE Done INT DEFAULT 0;
DECLARE f11, f12, f13, f14, f15 ,f16 INT;
DECLARE result int DEFAULT 0;
DECLARE temp, temp1, temp2, temp3, temp4, temp5, temp6 int DEFAULT 0;
DECLARE record varchar(1000) DEFAULT '0';
DECLARE i int default 0;
DECLARE cur_alarm CURSOR FOR SELECT Fault0, Fault1, Fault2, Fault3, Fault4, Fault5 from bsmu_alarm where SaveTime like concat(time, '%' ) and rtu_id = id order by SaveTime asc;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
OPEN cur_alarm;
FETCH cur_alarm INTO f1, f2, f3, f4, f5,f6;
FETCH cur_alarm INTO f11, f12, f13, f14, f15,f16;
IF (f1+f2+f3+f4+f5+f6) > 0 THEN
while (i < 6 ) do
IF (i = 0) THEN SET
temp = f1;
END IF;
IF (i =1 ) THEN SET
temp = f2;
END IF;
IF (i =2 ) THEN SET
temp = f3;
END IF;
IF (i =3 ) THEN SET
temp = f4;
END IF;
IF (i =4 ) THEN SET
temp = f5;
END IF;
IF (i =5 ) THEN SET
temp = f6;
END IF;
SET record = CONCAT(record, temp);
IF temp & 0x8000 THEN
SET result = result + 1;
END IF;
IF temp & 0x4000 THEN
SET result = result + 1;
END IF;
IF (temp & 0x2000 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x1000 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0800 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0400 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0200 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0100 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0080 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0040 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0020 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0010 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0008 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0004 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0002 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0001 ) THEN
SET result = result + 1;
END IF;
SET i = i + 1;
END WHILE;
END IF;
SET i = 0;
alarm_loop: LOOP
IF done=1 THEN
LEAVE alarm_loop;
END IF;
IF (f1 = f11) and (f2 =f12 ) and (f3 = f13) and (f4 = f14 ) and (f5 = f15) and (f6 = f16 )THEN
SET f1 = f11;
SET f2 = f12;
SET f3 = f13;
SET f4 = f14;
SET f5 = f15;
SET f6 = f16;
FETCH cur_alarm INTO f11, f12, f13, f14, f15,f16;
SET record = CONCAT(record, '=' );
ELSE
while ( i < 6 ) do
IF (i = 0 ) THEN
SET temp = (~f1 & f11);
END IF;
IF (i = 1 ) THEN
SET temp = (~f2 & f12);
END IF;
IF (i = 2 ) THEN
SET temp = (~f3 & f13 );
END IF;
IF (i = 3 ) THEN
SET temp = (~f3 & f14 );
END IF;
IF (i = 4) THEN
SET temp = (~f5 & f15);
END IF;
IF (i = 5 ) THEN
SET temp = (~f6 & f16 );
END IF;
SET record = CONCAT(record, temp);
<
4000
/span>IF temp & 0x8000 THEN
SET result = result + 1;
END IF;
IF temp & 0x4000 THEN
SET result = result + 1;
END IF;
IF (temp & 0x2000 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x1000 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0800 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0400 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0200 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0100 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0080 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0040 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0020 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0010 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0008 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0004 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0002 ) THEN
SET result = result + 1;
END IF;
IF (temp & 0x0001 ) THEN
SET result = result + 1;
END IF;
SET i = i + 1;
END WHILE;
SET i = 0;
SET f1 = f11;
SET f2 = f12;
SET f3 = f13;
SET f4 = f14;
SET f5 = f15;
SET f6 = f16;
FETCH cur_alarm INTO f11, f12, f13, f14, f15,f16;
END IF;
END LOOP alarm_loop;
CLOSE cur_alarm;
select time, result, record;
END
相关文章推荐
- Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
- mysql strace fsync,fdatasync
- mysql 查询结果前面加上序号
- MySQL(Replication-MS)
- MySQL中的数据类型
- mysql 学习心得 [学习]
- MySQL建立一个数据库中有多张表,每个表中都有id作为主键,为什么第一张表会报错?
- mysqldump 备份原理8
- mysql 性能分析套件
- 2、MySQL安装和配置
- Navicat Premium 将sqlserver 数据库 导入mysql 中
- mysql 优化
- mysql多表级联删除
- elasticsearch从mysql导入数据
- mysql的update的问题
- mysql数据表字段与系统关键字重名的问题
- mysql 根据子类id查询所有父类id
- mysql 更具父类id 查询所有子类id
- mysql中where和having的区别
- mysql 备份脚本