mysql 游标里 使用if_mysql存储过程和游标以及if-else,while典型实例

-- --------------------------------------------------------------------------------

-- Routine DDL

-- Note: comments before and after the routine body will not be stored by the server

-- --------------------------------------------------------------------------------

DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `P_ReleaseIp`(

In reip varchar(20),

in remac varchar(20),

in ipmode varchar(20),

out out_result int)

BEGIN

#释放的IP

DECLARE t_error INTEGER DEFAULT 0;

declare t_pid INTEGER DEFAULT 0;

DECLARE vlannum INTEGER;

declare m_switch varchar(20);

declare m_port varchar(20);

declare cur_release CURSOR for

select Switch,`Port` from VlanBindDefaultSwtich

where VlanId=(select ResourceId from AllResourceIpInfo where IpValue=funGetIPValue(reip));

declare zw_switchport CURSOR for

SELECT switch,`port` FROM IpManage_v2.StaticIpMacBindInfo

where ip= reip and mac=remac;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET t_pid = 1;

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;

select VlanNumber into vlannum from VlanInfo where funGetIPValue(reip) BETWEEN StartIpValue and EndIpValue;

START TRANSACTION;

if ipmode='禁用' THEN

delete from IpDisabledInfo where IpValue=funGetIPValue(reip);

DELETE from StaticIpMacBindInfo where Ip=reip and Mac='10:00:00:00:00:01';

/*DELETE from Ipswitcher where Ip=reip;*/

update AllResourceIpInfo set State=1 where IpValue=funGetIPValue(reip) and State=2;

open cur_release;

FETCH cur_release into m_switch,m_port;

while t_pid<>1 AND t_error<>1 DO

insert into StaticIpMacBindTaskInfo(Ip,Mac,Switch,Type,Port,Vlan,VpnInst,CreateTime)

values(reip,'10:00:00:00:00:01',m_switch,'unbind',m_port,vlannum,0,DATE_FORMAT(NOW(),'%Y-%m-%d %T'));

FETCH cur_release into m_switch,m_port;

end while;

close cur_release;

elseif ipmode='保护' then

delete from IpProtectedInfo where Ip=reip;

DELETE from IpProtectedMacList where Ip=reip and Mac=remac;

update AllResourceIpInfo set State=1 where IpValue=funGetIPValue(reip) and State=3;

elseif ipmode='绑定' THEN

delete from IpBindedInfo where Ip=reip and Mac=remac;

delete from StaticIpMacBindInfo where Ip=reip and Mac=remac;

update AllResourceIpInfo set State=1 where IpValue=funGetIPValue(reip) and State=4;

open zw_switchport;

FETCH zw_switchport into m_switch,m_port;

while t_pid<>1 AND t_error<>1 DO

insert into StaticIpMacBindTaskInfo(Ip,Mac,Switch,Type,Port,Vlan,CreateTime)

values(reip,remac,m_switch,'unbind',m_port,vlannum,DATE_FORMAT(NOW(),'%Y-%m-%d %T'));

FETCH zw_switchport into m_switch,m_port;

end while;

close zw_switchport;

end if;

if t_error=1 THEN

ROLLBACK;set out_result=0;

ELSE

COMMIT;set out_result=1;

end if;

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值