笔记:存储过程-定时器

存储过程-定时器

存储过程:

  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_COUNT INT DEFAULT-1;

DECLARE _STOP INT DEFAULT0;

DECLARE VAID INT;

DECLARE UID INT(11);

DECLARE UEMAIL VARCHAR(100);

DECLARE UCELL VARCHAR(20);

DECLARE UVIN VARCHAR(50);

DECLARE UCAR VARCHAR(20);

DECLARE DMS_CAR_CODE_SUB VARCHAR(30);

DECLARE DMS_CAR_CODE VARCHAR(30);

DECLARE DMS_C_25 VARCHAR(30);

DECLARE DMS_C_27 VARCHAR(50);

DECLARE DMS_C_11 VARCHAR(50);

DECLARE DMS_C_23 VARCHAR(30);

DECLARE DMS_C_68 VARCHAR(30);

DECLARE DMS_D_ID VARCHAR(50);

DECLARE DMS_DEALER_ID VARCHAR(20);

DECLARE DMS_PROVINCE_ID VARCHAR(20);

DECLARE DMS_CITY_ID VARCHAR(20);

DECLARE DMS_DEALER_NAME VARCHAR(100);

DECLARE DMS_CAR_MODEL VARCHAR(30);

DECLARE DMS_CARD_ID VARCHAR(60);

DECLARE NEW_CAROWNER_ID INT(11);

DECLARE CUR CURSORFORSELECT A_ID,USER_ID,EMAIL,USER_CELL,VIN_CODE,CAR_CODE FROM E_APPDMS;

/**包含游标NOT FOUND,和执行异常,handler是作为事件句柄*/

DECLAREEXIT HANDLER FORSQLSTATE'02000'

    BEGIN

      SET _STOP =1;

      SELECT'游标正常结束!';

   END;

 

   DECLAREEXIT HANDLER FORSQLEXCEPTION

   BEGIN

       SET _STOP=1;

       SELECTCONCAT('SQLEXCEPTION-TABLE[E_APPDMS]-NEW_CAROWNER_ID:',NEW_CAROWNER_ID);

   END;

OPEN CUR;

FETCH CUR INTO VAID,UID,UEMAIL,UCELL,UVIN,UCAR;

 

WHILE _STOP <>1 DO

  SELECTCOUNT(1) INTO D_COUNT FROM E_DMS_SALESDATA WHERE C_7 = UVIN AND 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_NAME INTODMS_DEALER_ID,DMS_PROVINCE_ID,DMS_CITY_ID,DMS_DEALER_NAME

          FROM E_DMS_DEALER_REFUSE WHERE DEALER_ID = DMS_C_11;

     SELECT MODEL_ID INTO DMS_CAR_MODEL FROM E_DMS_CARMODEL_REFUSE WHERE 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_ID INTO NEW_CAROWNER_ID FROM E_CAROWNER WHERE 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_SALESDATA SET 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_APPDMS WHERE 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_APPDMS WHERE VIN_CODE = UVIN;

    END IF;

  END IF;

  FETCH CUR INTO VAID, UID,UEMAIL,UCELL,UVIN,UCAR;

ENDWHILE;

CLOSE CUR;

END;

 

callappdms_proc();

 

定时器、事件例:

create event appdms_checker

  ON SCHEDULE every 1 day  -- 每天执行

  starts CURRENT_TIMESTAMP+INTERVAL 12 HOUR  -- 当前时间12小时后开始执行

  do call 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_schedulerOFF,需要执行下面语句开启

 set global event_scheduler = 1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pic18-q71是指一个产品型号或者设备型号,具体代表什么产品或设备需要更多信息来确切确定。一般来说,pic18-q71可能是某款电子产品、控制器或者微处理器的型号之一。 举个例子,pic18-q71可能是一款微控制器的型号,这款微控制器采用了PIC18体系结构,具备一些特定的功能和性能。微控制器是一种集成电路芯片,通过它来控制嵌入式系统的各种功能。pic18-q71可能具备较快的处理能力、丰富的外设接口以及可编程的特点,可以广泛应用于各种嵌入式系统、自动化设备或者电子产品中。 pic18-q71的具体特性和应用将取决于厂商的设计和产品规格。它可能有多个输入输出引脚,支持多种通信协议,如I2C、SPI等,还可能具备模拟输入输出功能,适用于各种传感器和执行器的连接。此外,pic18-q71很可能采用低功耗设计,具备较高的运算能力和存储容量,还有可靠的抗干扰能力。 总之,pic18-q71是一款特定的产品型号或者设备型号,代表某种型号的电子产品、控制器或者微处理器。具体它所采用的功能和特性需要查阅相关的产品资料或者咨询厂商以获取确切的信息。 ### 回答2: 在PIC18-Q71中,它是一款高性能的8位微控制器。它采用了先进的CMOS技术,具有低功耗、高速运算和高可靠性的特点。该微控制器内部集成了大量的功能模块,如多达三个模拟比较器、多个定时器、多路ADC和DAC等。这些功能模块的集成让开发者能够更方便地实现各种功能。 PIC18-Q71还具有丰富的外设接口,如UART、SPI和I2C等通信接口,可以与外部设备进行数据交互。此外,它还支持多种存储器类型,包括闪存、EEPROM和RAM,能够满足不同项目的存储需求。 此外,PIC18-Q71还支持多种低功耗模式,如睡眠模式和待机模式,以降低功耗并延长电池寿命。它还具有强大的中断处理能力,可以快速响应外部事件,并进行相应的处理。 PIC18-Q71的开发工具和开发环境也非常完善。Microchip提供了一套强大而易用的集成开发环境(IDE),开发者可以利用该环境进行编程、调试和仿真。此外,还有丰富的开发文档、示例代码和应用笔记可供参考,方便开发者快速上手和解决问题。 总之,PIC18-Q71是一款功能强大、易用性高的微控制器,适用于各种嵌入式应用。无论是工业控制、自动化设备还是消费类电子产品,PIC18-Q71都能提供稳定可靠的性能,满足不同项目的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值