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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述