触发器、存储过程(视图)、事件定时执行

触发器、存储过程(视图)、事件定时执行

1.触发器

1.1 before update

描述:更新触发前,补充行字段内容

触发条件:before update

触发表:performance_sys_project_score

delimiter //
CREATE TRIGGER `update_sys_project_score_order` BEFORE update ON `performance_sys_project_score` 
FOR EACH ROW 
begin 
		declare tmp_order_name varchar(255);
		set tmp_order_name = (select project_name from performance_sys_project_info where project_id = OLD.project_id);
		
		set NEW.order_id = 
		(case when OLD.order_id is null then
		CONCAT('GD',new.project_id,substr(curdate(),1,4),substr(curdate(),6,2),substr(curdate(),9,2))
		else OLD.order_id end
		);
		
		set NEW.order_name = 
		(case when OLD.order_name is null then
		CONCAT(tmp_order_name,'工单',substr(curdate(),3,2),substr(curdate(),6,2),substr(curdate(),9,2))
		else OLD.order_name end
		);
			
end; //
delimiter ;

1.2 after update

描述:更新触发后,插入目标表行内容

触发条件:after update

触发表:performance_sys_project_score

目标插入表:performance_sys_project_order

delimiter //
CREATE TRIGGER `update_insert_sys_project_order` BEFORE update ON `performance_sys_project_score` 
FOR EACH ROW 
begin 
		declare tmp_project_name varchar(255);
		declare tmp_rule_list  varchar(255);
		set tmp_project_name = 
		(select project_name from performance_sys_project_info where project_id = new.project_id);
		set tmp_rule_list = new.rule_list;
		
		if not exists (select * from performance_sys_project_order where order_id = new.order_id limit 1)
		then 
			insert into performance_sys_project_order 
		(order_id,order_name,project_id,project_name,active,create_user,create_time,order_stu)
			select new.order_id,new.order_name,new.project_id,
			tmp_project_name as project_name, '1' active,
			new.update_user as create_user,
			new.update_time as create_time,
			(case when tmp_rule_list is not null then 1 else 0 end) as order_stu
			from performance_sys_project_score
			where 1 = 1
			and project_id = new.project_id
	    and new.rule_list is not null
			group by project_id;
		end if ;
end; //
delimiter ;

描述:更新触发后,插入目标表行内容,且避免重复插入,进行存在判断

触发条件:after update

触发表:performance_sys_project_score

目标插入表:performance_sys_project_warnning

delimiter //
CREATE TRIGGER `update_insert_sys_project_order` BEFORE update ON `performance_sys_project_score` 
FOR EACH ROW 
begin 
    declare tmp_project_name varchar(255);
    declare tmp_rule_no3 varchar(255);
    declare tmp_rule_no2 varchar(255);
    declare tmp_rule_no1 varchar(255);
    declare tmp_qsly varchar(255);
    declare tmp_zzclxq varchar(255);
    declare tmp_pfxz varchar(255);
    set tmp_project_name = (select project_name from performance_sys_project_info where project_id = new.project_id);
    set tmp_rule_no3 = (select rule_no3 from performance_sys_project_rule where id = new.rule_id);
    set tmp_rule_no2 = (select rule_no2 from performance_sys_project_rule where id = new.rule_id);
    set tmp_rule_no1 = (select rule_no1 from performance_sys_project_rule where id = new.rule_id);
    set tmp_qsly = (select qsly from performance_sys_project_rule where id = new.rule_id);
    set tmp_zzclxq = (select zzclxq from performance_sys_project_rule where id = new.rule_id);
    set tmp_pfxz = (select pfxz from performance_sys_project_rule where id = new.rule_id);
    if not exists (select * from performance_sys_project_warnning where project_id = new.project_id and rule_id = new.rule_id and warnning_type = '得分空值预警'limit 1)
    then
        insert into performance_sys_project_warnning 
        (project_id,project_name,warnning,warnning_type,active,rule_no3,rule_no2,rule_no1,
        qsly,szfz,score,zzclxq,pfxz,rule_id)
            select 
                new.project_id,
                tmp_project_name as project_name,
                (case when new.score is null then '0' else '1' end) warnning,
                '得分空值预警' warnning_type,
                '1' active,
                tmp_rule_no3 as rule_no3,
                tmp_rule_no2 as rule_no2,
                tmp_rule_no1 as rule_no1,
                tmp_qsly,
                new.szfz,
                new.score,
                tmp_zzclxq as zzclxq,
                tmp_pfxz as pfxz,
                new.rule_id
            from performance_sys_project_score
            where 1 = 1 
            and new.score is null
            and new.rule_id is not null
            and new.rule_list is not null
            group by new.project_id;
     end if;
end; //
delimiter ;
1.3 单号自增与参数内传
delimiter //
CREATE TRIGGER `update_test_project_score_order` BEFORE update ON `test_project_score` 
FOR EACH ROW 
begin 
		declare dt char(8);
		declare od_id varchar(255);
		declare od_name varchar(255);
		declare num int;
		declare number int;
		declare new_od varchar(255);
		declare new_odname varchar(255);
		
		declare tmp_order_name varchar(255);
		set tmp_order_name = (select project_name from test_project_performance where project_id = new.project_id);
		set dt = date_format(curdate(), '%Y%m%d'); 
		
		select max(order_id) into od_id 
		from test_project_score 
		where project_id = old.project_id;
		
		if od_id = '' or od_id is null then 
			set new_od = concat('GD',new.project_id,dt,'0001');
		else 
			set number = right(od_id,4) + 1;
			set new_od = right(concat('0000',number),4);
			set new_od = concat('GD',new.project_id,dt,new_od);
		end if;
		set NEW.order_id = 
		(case when OLD.order_id is null then new_od else OLD.order_id end);

		select max(order_name) into od_name 
		from test_project_score 
		where project_id = old.project_id;
		
		if od_name = '' or od_name is null then 
			set new_odname = concat(tmp_order_name,'工单',dt,'0001');
		else 
			set num = right(od_name,4) + 1;
			set new_odname = right(concat('0000',num),4);
			set new_odname = concat(tmp_order_name,'工单',dt,new_odname);
		end if;
		set NEW.order_name = 
		(case when old.order_name is null then new_odname else OLD.order_name end);
end

2.存储过程(视图)

描述:

目标表:performance_sys_project_warnning

数据来源:视图

2.1存储过程

描述:新产生预警信息到表performance_sys_project_warnning

delimiter //
CREATE DEFINER=`easybuild`@`%` PROCEDURE `insert_sys_warnning_reform_out_time`()
BEGIN
		insert into performance_sys_project_warnning (
		project_id,project_name,project_type,warnning,warnning_type,active,
		rule_id,rule_no1,rule_no2,rule_no3,qsly,zzclxq,pfxz,
		szfz,score)
		select * from v_sys_reform_time_out;

END; //
delimiter ;
2.2视图

描述:先左独有连接,去除已有信息,筛选出新信息

create or replace view v_sys_reform_time_out as 
select tb.*  from (
 select 
        t1.project_id,
        t2.project_name,
        t2.project_type,
        (case when date_add(t1.update_time,interval 1 day) < CURRENT_TIMESTAMP() then '0' else '1' end) warnning, 
        '整改不及时预警' warnning_type,
        '1' active,
        t3.id as rule_id,
        t3.rule_no1,
        t3.rule_no2,
        t3.rule_no3,
        t3.qsly,
        t3.zzclxq,
        t3.pfxz,
        t1.szfz,
        t1.score	
        from performance_sys_project_score t1
            left join performance_sys_project_info t2
        on t1.project_id = t2.project_id
            left join performance_sys_project_rule t3
        on t1.rule_id = t3.id
        where 1 = 1
        and t1.rule_list = '1'
        and t1.order_id is not null
        and t1.rule_id is not null
        group by t1.project_id,t3.rule_no3
 ) tb 
    left join performance_sys_project_warnning t4
on tb.project_id = t4.project_id 
and tb.rule_id = t4.rule_id
and tb.warnning_type = t4.warnning_type
where t4.project_id is null;

3.事件定时执行

3.1创建事件与定时执行
-- 创建一个定时事件,,每1h执行一次
drop event sys_warnning_reform_out_time;
create event if not exists sys_warnning_reform_out_time
-- on schedule every 12 HOUR STARTS NOW()  -- 从现在开始, 每1h执行一次
on schedule  EVERY 1 HOUR STARTS NOW()
on completion PRESERVE
do call insert_sys_warnning_reform_out_time();    -- 回调 存储过程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中文版目录总汇及内容提要 第一章. 企业应用中的作业调度 内容提要:什么是作业调度,作业调度为什么说是重要的,企业应用中的作业调度,非企业应用中的作业调度,作业调度与工作流,关于作业调度其他可选择方案 第二章. Quartz 起步 内容提要:本章对 Quartz 框架一个快速的入门介绍,同时也大略指导你从哪里下载,构建和安装这个框架 第三章. Hello Quartz (第一部分) 内容提要:建立 Hello Quartz 工程,并创建一个 Quartz Job 类 ScanDirectoryJob. 第三章. Hello Quartz (第二部分) 内容提要:创建一个 Quartz Scheduler,关联上一个 Quartz Trigger 以编程方式调度前面编写的 ScanDirectoryJob 运行。 第三章. Hello Quartz (第三部分) 内容提要:通过配置 quartz.properties、quartz_jobs.xml 以声明的方式调度 ScanDirectoryJob 运行。 第三章. Hello Quartz (第四部分) 内容提要:让我们最后简单讨论打包一个用到了 Quarts 框架的应用程序的流程,需要依赖于哪些包,也以此来结束本章的内容。 第四章. 部署 Job (第一部分) 内容提要:介绍 Scheduler 和 SchedulerFactory 有哪些类型、SchedulerFactory 的关键 API 方法;以及如何通过 java.util.Properties 实例或默认 quartz.properties 文件创建 Scheduler。 第四章. 部署 Job (第二部分) 内容提要:如何管理 Scheduler(启动、停止、Standby 模式)。还介绍了 Job、JobExecutionContext、JobDetail、JobDataMap,及如何访问 JobDataMap 中的数据。有状态和无状态的 Job。 第四章. 部署 Job (第三部分) 内容提要:Job 的易失性、持久性和可恢复性,如何从 Scheduler 中移除、中断 Job。Quartz 已为我们提供了哪些 Job。最后是 Java 线程的简单介绍。 第四章. 部署 Job (第四部分) 内容提要:线程在 Quartz 中的用法,主处理线程:QuartzSchedulerThread 和 Quartz 工作者线程。Quartz Trigger 和 Calendar 各有哪些类型和如何使用。 第五章. Cron 触发器及相关内容 (第一部分) 内容提要:引入 Quartz CronTrigger 及简单使用 CronTrigger 来部署一个 Job 第五章. Cron 触发器及相关内容 (第二部分) 内容提要:详细介绍了 cron 表达式的格式和像 , - * ? / L W C # 特殊符号的使用 第五章. Cron 触发器及相关内容 (第三部分) 内容提要:CronTrigger 使用起(startTime) 迄(endTime) 日期的使用。TriggerUtils 简单方便的创建 Trigger。应用 JobInitializationPlugin 在 quartz_jobs.xml 配置文件中写 Cron 表达式。 第五章. Cron 触发器及相关内容 (第四部分) 内容提要:Cron 表达式 Cookbook,列举了各种 Cron 表达式的写法和意义,有助于更好的理解 Cron 表达式;还用了 TriggerUtils 创建了一个即刻触发的 Trigger。 第六章. Job 存储和持久化 (第一部分) 内容提要:介绍 Quartz 中的 Job 存储,JobStore 接口相关 API 方法。使用 RAMJobStore 来实现 Job 存储及它的优缺点。 第六章. Job 存储和持久化 (第二部分) 内容提要:使用持久性的 JobStore,可用类型 JobStoreTX 和 JobStoreCMT。持久性 JobStore 是通过数据库来完成的,哪可支持哪些数据及需要创建些什么表。 第六章. Job 存储和持久化 (第三部分) 内容提要:使用和配置 JobStoreTX,需要为不同数据库平台指定不同的驱动代理( DriverDelegate),和 quartz.properties 中与 JobStoreTX 相关配置说明。 第六章. Job 存储和持久化 (第四部分) 内容提要:为 JobStoreTX 通过在 quartz.properties 配置来创建数据源,并在 Scheduler 中使用数据源 第六章. Job 存储和持久化 (第五部分

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值