PROCEDURE_监测系统_告警信息存储过程—产生告警信息插入告警表
create or replace procedure proc_alarmlog(in_id in number, --采集器编码
ip_code in number, --采集器ip
in_time varchar2, --采集时间
t_arr num_array, --温度数据
h_arr num_array, --湿度数据
c_arr num_array) --二氧化碳数据
is
min_table num_type := num_type(0); --仓库监控阈值范围最小值
max_table num_type := num_type(0); --仓库监控阈值范围最大值
state_table num_type := num_type(0); --阈值范围对应的仓库状态
v_value number; --采集数据的临时变量
v_wid number; --仓库编码
v_count number; --临时变量,用于判断仓库某个采集区域是否存在警告或异常
v_state number; --临时变量,用于判断仓库某个采集区域的状态
v_reason varchar2(100):='';--临时变量,用于存储异常信息
v_err varchar2(200);--临时变量,用于存储异常信息
begin
--根据采集器编码获取仓库编码
begin
select wid into v_wid from warehouse_new t where t.client_id = in_id;
exception
when no_data_found then
return; --无法找到对应的仓库,返回
end;
--根据仓库编码获得仓库温度配置
--按告警状态倒序查询
--便于判断温度值状态
select min_value, max_value, state bulk collect
into min_table, max_table, state_table
from temperature t
where t.wid = v_wid
and t.state != 1
order by t.state desc;
--循环校验温度十个字段值,如果为255跳出循环
for i in 1 .. 10 loop
if t_arr(i) = 255 then
exit;
else
v_state := 1;
for j in 1 .. state_table.count loop
if t_arr(i) >= min_table(j) and t_arr(i) <= max_table(j) then
v_state := state_table(j);
if v_state = 3 then
v_reason:='异常,范围:'||min_table(j)||'到'||max_table(j);
elsif v_state = 2 then
v_reason:='告警,范围:'||min_table(j)||'到'||max_table(j);
else
v_reason:='';
end if;
exit; --退出内层循环
end if;
end loop;
select count(1)--判断该区域是否已存在未解决的告警信息
into v_count
from alarmlog t
where t.solvestate = 0
and t.jurisdictionid = i
and t.warehouseid = v_wid;
if v_count > 0 then
update alarmlog t
set t.state = decode(v_state,1,t.state,v_state),--如果状态是正常,则不改变告警信息记录的状态
t.solvetime = decode(v_state,1,to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'),''),
t.solvestate = decode(v_state,1,1,0)--如果状态是正常则改变告警信息的解决状态为1:已解决
where t.solvestate = 0
and t.jurisdictionid = i
and t.indicator = 1--温度
and t.warehouseid = v_wid;
elsif v_state!= 1 then
insert into alarmlog
(id,--主键
time,--采集时间
reason,--告警原因
warehouseid,--所属仓库编码
jurisdictionid,--异常区域(1-10)
solvestate,--异常解决状态
state,--发生异常时仓库状态
value,--发生异常的值
ipcode,--采集器编码
indicator)--异常种类(温度、适度、二氧化碳)
values
(alarmlog_id_seq.nextval, in_time, v_reason,v_wid,i,0,v_state,t_arr(i),in_id,1);
end if;
end if;
end loop;
--根据仓库编码获得仓库湿度配置
--按告警状态倒序查询
--便于判断温度值状态
select min_value, max_value, state bulk collect
into min_table, max_table, state_table
from humidity t
where t.wid = v_wid
and t.state != 1
order by t.state desc;
--循环校验湿度十个字段值,如果为255跳出循环
for i in 1 .. 10 loop
if h_arr(i) = 255 then
exit;
else
v_state := 1;
for j in 1 .. state_table.count loop
if h_arr(i) >= min_table(j) and h_arr(i) <= max_table(j) then
v_state := state_table(j);
if v_state = 3 then
v_reason:='异常,范围:'||min_table(j)||'到'||max_table(j);
elsif v_state = 2 then
v_reason:='告警,范围:'||min_table(j)||'到'||max_table(j);
else
v_reason:='';
end if;
exit; --退出内层循环
end if;
end loop;
select count(1)--判断该区域是否已存在未解决的告警信息
into v_count
from alarmlog t
where t.solvestate = 0
and t.jurisdictionid = i
and t.warehouseid = v_wid;
if v_count > 0 then
update alarmlog t
set t.state = decode(v_state,1,t.state,v_state),--如果状态是正常,则不改变告警信息记录的状态
t.solvetime = decode(v_state,1,to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'),''),
t.solvestate = decode(v_state,1,1,0)--如果状态是正常则改变告警信息的解决状态为1:已解决
where t.solvestate = 0
and t.indicator = 2--湿度
and t.jurisdictionid = i
and t.warehouseid = v_wid;
elsif v_state!= 1 then
insert into alarmlog
(id,--主键
time,--采集时间
reason,--告警原因
warehouseid,--所属仓库编码
jurisdictionid,--异常区域(1-10)
solvestate,--异常解决状态
state,--发生异常时仓库状态
value,--发生异常的值
ipcode,--采集器编码
indicator)--异常种类(温度、适度、二氧化碳)
values
(alarmlog_id_seq.nextval, in_time, v_reason,v_wid,i,0,v_state,h_arr(i),in_id,2);
end if;
end if;
end loop;
-- commit;
exception when others then
v_err:=sqlerrm;
insert into operationlog
(id, time, behavior, state, reason)
values
(operationlog_id_seq.nextval,
to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'),
'生成告警信息发生数据库异常',
1,
v_err);
-- commit;
end proc_alarmlog;
PROCEDURE_监测系统_告警信息存储过程—产生告警信息插入告警表的更多相关文章
- PROCEDURE_监测系统_数据备份存储过程—备份原始数据,每十分钟一条,取平均值
create or replace procedure proc_backup_originaldata(retCode out varchar2, -- 返回码 ...
- PROCEDURE_监测系统_原始数据报表数据生成存储过程—求每天平均值插入多表视图
create or replace procedure proc_generate_report(in_date in varchar2) is v_retCode varchar2(20); v ...
- TRIGGERS_监测系统_原始数据表触发器—调用告警信息存储过程
//每次向originaldata表中插入数据就会触发该触发器 create or replace trigger originaldata_to_alarm after insert on ori ...
- TRIGGERS_监测系统_多表视图触发器—向原始数据报表中插入数据
Create Or Replace Trigger trg_view_report Instead Of Insert or update or delete on view_for_report ...
- QT--动态人流量监测系统
QT--动态人流量监测系统 简介: 本项目使用了百度AI的动态人流量监测api,以人体头肩为主要识别目标,适用于低空俯拍,出入口场景,可用于统计当前图像的锁定人数和经过的人数 项目功能 本项目分为相机 ...
- 基于RestOn智能睡眠监测器的睡眠监测系统
一.项目地址为: https://github.com/linqian123... 二.项目功能概述: 该项目实现的是一个基于RestOn智能睡眠监测器的睡眠监测系统.RestOn智能睡眠检测器通过W ...
- Security基础(五):部署Cacti监控平台、构建Cacti监测系统
一.部署Cacti监控平台 目标: 本案例要求部署一台Cacti监控主机,并安装相关监控组件,为进一步执行具体的监控任务做准备: 安装net-snmp.net-snmp-utils 安装LAMP及相关 ...
- 胎压监测系统(DWS)
胎压监测系统(DWS)通过监测和比较行驶时各车轮和轮胎的滚动半径和旋转特性,以确定是否一个或多个轮胎明显充气不足,而非直接测量各轮胎的压力. 系统监测到异常时指示灯将点亮,且仪表上出现信息. 必须校准 ...
- Linux系统下输出某进程内存占用信息的c程序实现
在实际工作中有时需要程序打印出某个进程的内存占用情况以作参考, 下面介绍一种通过Linux下的伪文件系统/proc 计算某进程内存占用的程序实现方法. 首先, 为什么会有所谓的 伪文件 呢. Linu ...
随机推荐
- Kendo Web UI Grid数据绑定,删除,编辑,并把默认英文改成中文
Kendo Web UI 是个不错的Jquery框.可惜老外写的,很多都是默认的英文,当然我们也可以设置成中文,接下来,我们就看看Grid是如何实现的数据绑定(Kendo Grid数据绑定实现有很多方 ...
- js复制对象 和 节点类型和NodeList
1. myList.cloneNode(true); 在参数为true的情况下,执行深复制,也就是复制节点及其整个子节点树,包括属性 2. myList.cloneNode(false); 在参数为f ...
- php解析json数组(循环输出数据)的实例
以快递100接口为例 返回的JSON数据 {"message":"ok","nu":"350116805826",&qu ...
- CMS设计-组件化
原来CMS使用的专题类的页面是 : 事先由前端写好完整页面,再交付给运营使用,这样使用的比较灵活,可以根据市场的不同需求由前端切出不同的页面,有时候一旦需求过多,就耽误切图的时间. 现在M和H5采用组 ...
- js获取IP地址的方法小结
s代码获取IP地址的三种方法,在js中取得客户端的IP地址. 原文地址:http://www.jbxue.com/article/11338.html 1,js取得IP地址的方法一 <scrip ...
- C语言多维数组的地址
设有整型二维数组a[3][4]如下: 0 1 2 3 4 5 6 7 8 9 10 11 它的定义为: int a[3][4]={{0,1,2,3},{4,5 ...
- windows安装配置mysql-5.7.13-winx64方法
1.mysql-5.7.13-winx64.zip下载 官方下载地址:http://dev.mysql.com/downloads/mysql/ 2.解压到D:\mysql\mysql-5.7.13- ...
- 《转》ACTIONBAR-PULLTOREFRESHLIBS+沉浸式在部分手机上的布局错乱,目前知道的三星系统(TouchWiz)
转载:http://www.cnblogs.com/wubingshenyin/p/4413672.html(原文连接) 前段时间看见ActionBar-PullToRefreshLibs用来刷新很好 ...
- 关于Android界面编程与视图(View)组件
UI组件--------------->android.widget.* View组件------------->android.view.* 视图(View)组件 所有UI组件都是建立在 ...
- Win8.1专业版、核心板和企业版有什么区别
Win8.1核心版(一般就称之为Windows 8.1) + Win8.1 专业版(称之为Windows 8.1 Pro),根据用户输入的序列号(就是Win8密钥)来区分安装.Win8.1企业版(称之 ...