mysql 存储过程

1.带游标的存储过程

DROP PROCEDURE  IF EXISTS `sp_message_his`; 

CREATE PROCEDURE `sp_message_his`(IN `msg_id` int) 

 

BEGIN 

  -- 用户id -- 

  declare v_userid bigint(20);

  -- 遍历数据结束标志

  DECLARE done INT DEFAULT FALSE;

  -- 查询推送方式为1的所有用户id

  declare cur cursor for SELECT t.userID from devicetoken t where t.pushtype=1;

  -- 将结束标志绑定到游标

  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

 

  -- 打开游标

  OPEN cur;

   -- 开始循环

   read_loop: LOOP

    -- 提取游标里的数据,这里只有一个,多个的话也一样;

    FETCH cur INTO v_userid;

    -- 声明结束的时候

    IF done THEN

      LEAVE read_loop;

    END IF;

    -- 这里做你想做的循环的事件

    INSERT INTO suinfouser(userID,infoID,readed) values (v_userid,msg_id,0);

  END LOOP;

  -- 关闭游标

  CLOSE cur;

END

 

 

DROP PROCEDURE  IF EXISTS `sp_choose_his`; 

CREATE PROCEDURE `sp_choose_his`() 

BEGIN 

   DECLARE v_customerId int;

   DECLARE v_regtime date;

   DECLARE v_order_no VARCHAR(64);

 

   -- 遍历数据结束标志

   DECLARE done INT DEFAULT FALSE;

   -- 查询所有的VIP用户

   DECLARE cur cursor for SELECT t.customerId,left(t.RegTime,10) regtime from cus_customer t where t.GroupId=7

   and t.customerId not in (SELECT DISTINCT t.customer_id from choose_stock_record t where t.pay_status=1 and t.type=4);

   -- 将结束标志绑定到游标

   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

 

   -- 打开游标

   OPEN cur;

   -- 开始循环

   read_loop: LOOP

    -- 提取游标里的数据,这里只有一个,多个的话也一样;

    FETCH cur INTO v_customerId,v_regtime;

    -- 声明结束的时候

    IF done THEN

      LEAVE read_loop;

    END IF;

    select round(round(rand(),12)*10000000000) INTO v_order_no from dual;

    -- 这里做你想做的循环的事件

    INSERT into choose_stock_record(customer_id,order_no,stock_code,start_date,end_date,pay_amount,unit_name,unit_period,pay_time,pay_status,sub_status,type,channel,create_time,remark)

    VALUES(v_customerId,concat(168,v_order_no),'xg_zlzy',v_regtime,date_add(v_regtime, interval 365 day),0,'vip赠送',365,NOW(),1,1,4,1,NOW(),'手动开通选股');

 

    INSERT into choose_stock_record(customer_id,order_no,stock_code,start_date,end_date,pay_amount,unit_name,unit_period,pay_time,pay_status,sub_status,type,channel,create_time,remark)

    VALUES(v_customerId,concat(168,v_order_no),'xg_flzt',v_regtime,date_add(v_regtime, interval 365 day),0,'vip赠送',365,NOW(),1,1,4,1,NOW(),'手动开通选股');

 

    INSERT into choose_stock_record(customer_id,order_no,stock_code,start_date,end_date,pay_amount,unit_name,unit_period,pay_time,pay_status,sub_status,type,channel,create_time,remark)

    VALUES(v_customerId,concat(168,v_order_no),'xg_qlzy',v_regtime,date_add(v_regtime, interval 365 day),0,'vip赠送',365,NOW(),1,1,4,1,NOW(),'手动开通选股');

 

    INSERT into choose_stock_record(customer_id,order_no,stock_code,start_date,end_date,pay_amount,unit_name,unit_period,pay_time,pay_status,sub_status,type,channel,create_time,remark)

    VALUES(v_customerId,concat(168,v_order_no),'dz_xg_slqf',v_regtime,date_add(v_regtime, interval 365 day),0,'vip赠送',365,NOW(),1,1,4,1,NOW(),'手动开通选股');

 

    INSERT into choose_stock_record(customer_id,order_no,stock_code,start_date,end_date,pay_amount,unit_name,unit_period,pay_time,pay_status,sub_status,type,channel,create_time,remark)

    VALUES(v_customerId,concat(168,v_order_no),'dz_xg_ztyc',v_regtime,date_add(v_regtime, interval 365 day),0,'vip赠送',365,NOW(),1,1,4,1,NOW(),'手动开通选股');

 

  END LOOP;

  -- 关闭游标

  CLOSE cur;

   

END;

 

2.普通的存储过程

DROP PROCEDURE  IF EXISTS `sp_timeshar_his`; 

CREATE PROCEDURE `sp_timeshar_his`

BEGIN 

   DECLARE v_cur_Date date;

   DECLARE v_cur_num_sh int;

   DECLARE v_minDate_sh date; 

   DECLARE v_cur_num_sz int;

   DECLARE v_minDate_sz date; 

 

   set v_cur_Date = CURDATE();

   set v_cur_num_sh =0;

   set v_cur_num_sz =0;

   

   -- 查询上海当天是否有数据 -- 

   SELECT count(1) into v_cur_num_sh from stk_timesharing_sh where date=DATE_FORMAT(v_cur_Date,'%Y-%m-%d');

   -- 把数据写入历史表 --

   if v_cur_num_sh>0 THEN 

       INSERT INTO stk_timesharing_sh_bak(ts_id,asset_id,price,avg_price,volume,date,time,create_time) 

       select t.ts_id,t.asset_id,t.price,t.avg_price,t.volume,t.date,t.time,CURTIME() from stk_timesharing_sh t 

       where t.date=DATE_FORMAT(v_cur_Date, '%Y-%m-%d');

   end if ;

   -- 查询最小的日期 --

   select min(a.date) into v_minDate_sh from 

   (SELECT DISTINCT t.date from stk_timesharing_sh t ORDER BY t.date desc LIMIT 8)a;

   -- 删除数据--

   DELETE from stk_timesharing_sh where date<=DATE_FORMAT(v_minDate_sh, '%Y-%m-%d');

 

   -- 查询深圳当天是否有数据 -- 

   SELECT count(1) into v_cur_num_sz from stk_timesharing_sz  where date=DATE_FORMAT(v_cur_Date,'%Y-%m-%d');

    -- 把数据写入历史表 --

   if v_cur_num_sz>0 THEN 

       INSERT INTO stk_timesharing_sz_bak(ts_id,asset_id,price,avg_price,volume,date,time,create_time) 

       select t.ts_id,t.asset_id,t.price,t.avg_price,t.volume,t.date,t.time,CURTIME() from stk_timesharing_sz t 

       where t.date=DATE_FORMAT(v_cur_Date, '%Y-%m-%d');

   end if ;

   -- 查询最小的日期 --

   select min(a.date) into v_minDate_sz from 

   (SELECT DISTINCT t.date from stk_timesharing_sz t ORDER BY t.date desc LIMIT 8)a;

   -- 删除数据--

   DELETE from stk_timesharing_sz where date<=DATE_FORMAT(v_minDate_sz, '%Y-%m-%d');

   

 

END

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值