笔记:存储过程-定时器
来源:互联网 发布:网络中控品牌 编辑:程序博客网 时间:2024/05/18 03:44
存储过程-定时器
存储过程:
CREATE PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
参数:[ IN | OUT | INOUT ] param_name type
定时器/事件:
CREATEEVENT [IFNOT EXISTS] event_name
ON SCHEDULE schedule
[ONCOMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;
事件schedule取值:
schedule:
ATTIMESTAMP [+ INTERVAL INTERVAL]
| EVERYINTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]
schedule中interval取值:
INTERVAL:
quantity{YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK |SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND| HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
存储过程例:
BEGIN
DECLARE D_COUNTINT DEFAULT-1;
DECLARE _STOPINT DEFAULT0;
DECLARE VAIDINT;
DECLARE UIDINT(11);
DECLARE UEMAILVARCHAR(100);
DECLARE UCELLVARCHAR(20);
DECLARE UVINVARCHAR(50);
DECLARE UCARVARCHAR(20);
DECLARE DMS_CAR_CODE_SUBVARCHAR(30);
DECLARE DMS_CAR_CODEVARCHAR(30);
DECLARE DMS_C_25VARCHAR(30);
DECLARE DMS_C_27VARCHAR(50);
DECLARE DMS_C_11VARCHAR(50);
DECLARE DMS_C_23VARCHAR(30);
DECLARE DMS_C_68VARCHAR(30);
DECLARE DMS_D_IDVARCHAR(50);
DECLARE DMS_DEALER_IDVARCHAR(20);
DECLARE DMS_PROVINCE_IDVARCHAR(20);
DECLARE DMS_CITY_IDVARCHAR(20);
DECLARE DMS_DEALER_NAMEVARCHAR(100);
DECLARE DMS_CAR_MODELVARCHAR(30);
DECLARE DMS_CARD_IDVARCHAR(60);
DECLARE NEW_CAROWNER_IDINT(11);
DECLARE CURCURSORFORSELECT A_ID,USER_ID,EMAIL,USER_CELL,VIN_CODE,CAR_CODEFROM E_APPDMS;
/**包含游标NOT FOUND,和执行异常,handler是作为事件句柄*/
DECLAREEXIT HANDLERFORSQLSTATE'02000'
BEGIN
SET _STOP=1;
SELECT'游标正常结束!';
END;
DECLAREEXIT HANDLERFORSQLEXCEPTION
BEGIN
SET _STOP=1;
SELECTCONCAT('SQLEXCEPTION-TABLE[E_APPDMS]-NEW_CAROWNER_ID:',NEW_CAROWNER_ID);
END;
OPEN CUR;
FETCH CURINTO VAID,UID,UEMAIL,UCELL,UVIN,UCAR;
WHILE _STOP<>1 DO
SELECTCOUNT(1)INTO D_COUNT FROM E_DMS_SALESDATA WHERE C_7 = UVINAND IS_ACTIVITE =0AND IS_AUTH=0;
IF D_COUNT>0THEN
SELECTCOUNT(1)INTO D_COUNT FROM E_CAROWNER WHERE VIN_CODE = UVIN;
IF (D_COUNT<=0)THEN
SELECT CAR_CODE_SUB, CAR_CODE ,C_25, C_68, C_27, C_11,C_23,D_ID ,CARD_ID
INTO DMS_CAR_CODE, DMS_CAR_CODE_SUB, DMS_C_25,DMS_C_68,DMS_C_27, DMS_C_11,DMS_C_23,DMS_D_ID,DMS_CARD_ID
FROM E_DMS_SALESDATA
WHERE C_7= UVIN AND IS_ACTIVITE=0AND IS_AUTH=0;
SELECT DEALER_ID,PROVINCE_ID,CITY_ID,CN_NAMEINTODMS_DEALER_ID,DMS_PROVINCE_ID,DMS_CITY_ID,DMS_DEALER_NAME
FROM E_DMS_DEALER_REFUSEWHERE DEALER_ID= DMS_C_11;
SELECT MODEL_IDINTO DMS_CAR_MODELFROM E_DMS_CARMODEL_REFUSEWHERE COMMERCIAL_CODE= DMS_C_68;
START TRANSACTION;
INSERTINTOE_CAROWNER(VIN_CODE,CAR_CODE,CAR_MODEL,USER_NAME,IDENTITY_CARD,SUB_CAR_TYPE,CAR_TYPE
,DEALER_PROVINCE,DEALER_CITY,DEALER_ID,USER_ID,D_ID,AUTH_APPROVE_TIME,AUTH_TYPE,CAR_AUTH_STATUS)
VALUES(UVIN,UCAR,DMS_CAR_MODEL,DMS_C_25,DMS_C_27,DMS_CAR_CODE_SUB,DMS_CAR_CODE,DMS_PROVINCE_ID
,DMS_CITY_ID,DMS_C_11,UID,DMS_D_ID,UNIX_TIMESTAMP(CURRENT_TIME()),2,1);
SELECT CAROWNER_IDINTO NEW_CAROWNER_IDFROM E_CAROWNERWHERE VIN_CODE= UVIN;
if (strcmp(DMS_C_23,' ')=0)then
set DMS_C_23='0-0-0';
end if;
INSERTINTOE_CAROWNER_DETAIL(BUY_TIME,CAROWNER_ID,AUTH_APPLAY_TIME,CREATOR_ID,USER_CARD_ID,CAROWNER_NAME,USER_EMAIL
,USER_CELL,DEALER_NAME,CREATE_TIME,CARD_ACTIVATE_STATUS,CARD_SEND_STATUS,IS_FULL_INFO)
VALUES (UNIX_TIMESTAMP(DMS_C_23),NEW_CAROWNER_ID,UNIX_TIMESTAMP(CURRENT_TIME()),UID,DMS_CARD_ID,
DMS_C_25,UEMAIL,UCELL,DMS_DEALER_NAME,UNIX_TIMESTAMP(CURRENT_TIME()),1,0,0);
UPDATE E_DMS_SALESDATASET IS_AUTH=1,AUTH_TIME=UNIX_TIMESTAMP(CURRENT_TIME()),IS_ACTIVITE=1,
ACTIVATE_TIME=UNIX_TIMESTAMP(CURRENT_TIME())WHERE D_ID = DMS_D_ID;
DELETEFROM E_APPDMSWHERE A_ID= VAID;
COMMIT;
END IF;
ELSE
SELECTCOUNT(1)INTO D_COUNT FROM E_DMS_SALESDATA WHERE C_7 = UVIN;
IF (D_COUNT>0)THEN
DELETEFROM E_APPDMSWHERE VIN_CODE= UVIN;
END IF;
END IF;
FETCH CURINTO VAID, UID,UEMAIL,UCELL,UVIN,UCAR;
ENDWHILE;
CLOSE CUR;
END;
callappdms_proc();
定时器、事件例:
create event appdms_checker
ON SCHEDULE every1 day --每天执行
startsCURRENT_TIMESTAMP+INTERVAL12 HOUR -- 当前时间12小时后开始执行
docall appdms_proc();
我的例子
-- 存储过程定时器 定时新增用户
drop procedure if existscustomer_increment_proc;
create procedure customer_increment_proc(incrDate date)
begin
-- 上一天数量
declare preDaysCount int;
declare flag int;
select count(1) into preDaysCount fromfh_customer where create_date between date_format(date_add(incrDate, interval-1 day),'%Y-%m-%d 00:00:00') and date_format(date_add(incrDate, interval -1day),'%Y-%m-%d 23:59:59') and del_flag = '0';
-- 数量随机增减
set flag = 1;
if MOD(DAYOFYEAR(now()), FLOOR(rand() *31)) = 0 then set flag = -1; end if;
set preDaysCount = preDaysCount +FLOOR(rand() * 150);
-- 新增当日用户
update fh_customer set del_flag = '0',create_date = concat(date_format(incrDate,'%Y-%m-%d'),FLOOR(4+rand()*20),':',FLOOR(rand()*59),':',FLOOR(rand()*59)) where del_flag = '1' limit preDaysCount;
end;
-- callcustomer_increment_proc(str_to_date('2017-04-21 00:00:00','%Y-%m-%d%H:%i:%s'));
-- 定时器定时调用新增用户
create event customer_incr_task
on schedule every 1 day
starts current_timestamp + interval 11 hour
on completion preserve
do call customer_increment_proc(now());
注意:mysql默认不开启事件计划任务,需要开启:
show variables like '%sche%'; --如果event_scheduler是OFF,需要执行下面语句开启
set global event_scheduler = 1;
- 笔记:存储过程-定时器
- 定时器存储过程
- oracle存储过程、定时器
- MySQL存储过程,定时器
- 创建存储过程 定时器 ,启动定时器
- oracle定时器调用存储过程
- oracle定时器调用存储过程
- oracle 定时器调用存储过程
- mysql 定时器调用存储过程
- oracle定时器调用存储过程
- 定时器中调用存储过程
- mysql定时器调用存储过程
- Oracle定时器调用存储过程
- mysql定时器执行存储过程
- mysql 定时器 启动 存储过程
- 关于Mysql 字段遇到关键字注解处理 存储过程 以及 函数 定时器 的笔记
- 重温 oracle存储过程和定时器
- Oracle 视图,存储过程,定时器开发,触发器
- 两张表合为一张表查询
- STM32——定时器TIME模块之输入捕获
- github
- 机器学习笔记——概率生成模型
- js实现延迟条件执行
- 笔记:存储过程-定时器
- 新文章
- 后台往前台传值,出现中文乱码问题。
- python入门(二十五):反射
- 获取当前日期时间
- SurfaceView 实现水波纹动画效果
- 基于stm32f10x Systick定时器编写延时函数的讲解
- 7.生存时间TTL
- mysql 查询当天、本周,本月,上一个月的数据