2017-12-28 10:44:20 
						  500 
						   22 
						   
					
					
					每次写存储过程都是个挑战,不过每次写完,写好了,感觉都蛮不错的。
嘿嘿,看看,感觉良好。
其实有时候,我感觉不一定非得用存储过程,不过既然老大要求,那也没办法呢,做呢。
当然,这个确实是可以使用存储过程的呢。
DROP PROCEDURE IF EXISTS `clean_off_route`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `clean_off_route`(IN psvrid varchar(30),IN savedata varchar(30),out routeids varchar(30)) COMMENT '清除超时或者使用完成的路由,并下线'
begin 
  declare maxnum INTEGER DEFAULT 6; -- 路由公司最大使用次数,超过该次数,下线
declare maxnousehour INTEGER DEFAULT 3; -- 路由最大大无使用时间,大于该时间、下线
declare v_finished INTEGER DEFAULT 0;
declare pid varchar(30) default "";
 declare rid varchar(30) default "";
 declare rtype varchar(30) default "";
 DECLARE _Cur CURSOR for
select proxyserver_id,routeid,type from (
-- 过滤中转服务器、在线状态
select * from (
-- 全量1条件过滤
select * from (
-- 全量1--路由公司使用次数---
select r.proxyserver_id,r.flag,r.free,rcnums.*,'maxuse' type from route_info r left join
(
select routeid,companyid,count(*) num from (
-- 关联路由使用记录-公司
select rus.*, pcpsvr.companyid from route_use_log  rus
left JOIN
(
-- 手机账号-公司 中转服务器-,,对应关系
select cphone.phoneip,cphone.accountid,cpsvr.* from 
(
select 
substring_index(p.ip , '.',3) phone_ippre,p.accountid
,cast(substring_index(p.ip , '.',-1)  as SIGNED INTEGER) phone_iplast,
c.accountid companyid,c.company_name,p.accountid phoneaccount,p.city phonecity,p.ip phoneip from phoneaccount_info p LEFT JOIN company_info c on c.accountid=p.company_userid
order by c.accountid
) cphone
left join
(
select substring_index(substring_index(cp.ipdesc, '-',1), '.',3) ippre
, cast( substring_index(substring_index(cp.ipdesc, '-',1), '.',-1) as SIGNED INTEGER) ipstart
,cast( substring_index(substring_index(cp.ipdesc, '-',-1), '.',-1)  as SIGNED INTEGER) ipend
, psvr.id proxyserver_id ,psvr.assignphones,psvr.maxphones,cp.companyid,cp.ipdesc from proxyserver_info psvr left join company_proxyserver cp on psvr.id=cp.proxyserver_id
) cpsvr 
 on (cpsvr.companyid=cphone.companyid
 and cphone.phone_ippre=cpsvr.ippre 
 and cphone.phone_iplast>=cpsvr.ipstart
 and cphone.phone_iplast<=cpsvr.ipend 
) 
 -- 手机账号-公司 中转服务器-,,对应关系--end
) pcpsvr on rus.phoneip=pcpsvr.phoneip
) rtcmp  where time>DATE_SUB(now(),INTERVAL 24 HOUR)  group by companyid ,routeid order by count(*) desc
) rcnums on r.routeid=rcnums.routeid
-- 全量1--路由公司使用次数--- end
) tmax where tmax.num>maxnum 
union
(
-- 查询
select * from (
-- 全量2,xx小时内没有时间记录
select r.proxyserver_id,r.flag,r.free,r.routeid,rcnums.num,'' companyid,'nouse' type from route_info r left join
(
select routeid,count(*) num  from route_use_log where
 time>DATE_SUB(now(),INTERVAL maxnousehour HOUR)  group by routeid 
) rcnums on r.routeid=rcnums.routeid
-- 全量2,xx小时内没有时间记录--end
) tuse where tuse.num is null
)
) tall where proxyserver_id=psvrid and flag=2
) tall2;
DECLARE CONTINUE HANDLER 
FOR NOT FOUND SET v_finished = 1;
set routeids = "xxxx";
set v_finished = 0;
-- 循环处理
OPEN _Cur;
dowork: LOOP
 FETCH _Cur INTO  pid,rid,rtype;
 IF v_finished = 1 THEN 
 LEAVE dowork;
 END IF;
-- insert into  mysql_pro_log   values(concat(pid,rid,rtype,date_format(now(),'%Y-%m-%d %H'),' '),now());
  -- 操作
  -- 处理返回
   set routeids= concat(routeids,",",rid) ;
if(savedata='true') then
  -- 表状态
 select routeid into rid from route_info where proxyserver_id=psvrid and routeid=rid and flag=2;
 if(rid is not null) then    -- 过滤
   --  路由状态
   update route_info set flag=0,free=0,offlinetime=now() ,proxyserver_id="" where proxyserver_id=psvrid and routeid=rid;
    -- 下线时间
	 update route_log_Info set offlinetime=now(),offlinetype="0" where offlinetime is null and routeid=rid and proxyserver_id=pid;
    
    if(rtype = 'maxuse') then
     --  服务完成
    insert into server_complete_route values(pid,rid,now());
    end if;
 end if;
end if;
 
END LOOP dowork;
CLOSE _Cur;
end
;;
DELIMITER ;
 
						 2018-01-07 20:45:31 
						
					
					
							     0
							 赞
							    
							 赏
							
						
					本文基于CC BY-NC-ND 4.0 许可协议发布,作者:野生的喵喵。 固定链接: 【Mysql存储过程】 转载请注明
相关文章:
		发表新的评论
	
	文章分类
文章归档
标签
					
						deb ,  
						 ,  
						蓝屏 ,  
						select ,  
						html5 ,  
						tomcat ,  
						gcc ,  
						ajax ,  
						apt-get update ,  
						选择 ,  
						js加密 ,  
						java ,  
						工作 ,  
						ocr ,  
						AngularJs ,  
						感慨 ,  
						work ,  
						click ,  
						javascript ,  
						反向代理 ,  
						ip查询 ,  
						空间查询 ,  
						word ,  
						ECS服务器 ,  
						centos ,  
						杂 ,  
						StartupWMClass ,  
						前端 ,  
						js ,  
						vmdk ,  
						感概 ,  
						select2 ,  
						virtualbox ,  
						gg代理 ,  
						share ,  
						seo ,  
						风筝 ,  
						email ,  
						ASR ,  
						转换 ,  
						cool ,  
						activiti-ui ,  
						喵小凡 ,  
						@PropertySource ,  
						ckeiditor ,  
						网站攻击 ,  
						SRILM ,  
						风景 ,  
						plugin ,  
						vdi ,  
						扩容 ,  
						chorme ,  
						阿里云 ,  
						KALDI ,  
						num ,  
						packer2 ,  
						pic ,  
						gg镜像 ,  
						win8.1 ,  
						ecs ,  
						mysql ,  
						Ubuntu ,  
						快递查询 ,  
						nginx ,  
						ubuntu ,  
						swap ,  
						maven ,  
						entropy_avail ,  
						tencent ,  
						语音识别 ,  
						prerender ,  
						xfce4 ,  
						进度条 ,  
						存储过程 ,  
						activiti ,  
						熵 ,  
						日出 ,  
						练笔 ,  
						虞美人 ,  
						nodejs ,  
						词 ,  
						demo ,  
						jquery ,  
						random ,  
						linux ,  
						cat ,  
						bootstrapValidator ,  
						angularJs ,  
						live ,  
						on ,  
						gg ,  
						雪 ,  
						婚姻 ,  
						景色 ,  
						@Autowired ,  
						pdf ,  
						emqttd ,  
						优化 ,  
						thchs30 ,  
						opencv ,