-- --------------------------------------------------------------------------------
-- 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

mysql存储过程和游标以及if-else,while典型实例的更多相关文章

  1. mysql存储过程之游标遍历数据表

    原文:mysql存储过程之游标遍历数据表 今天写一个mysql存储过程,根据自己的需求要遍历一个数据表,因为对存储过程用的不多,语法不甚熟悉,加之存储过程没有调试环境,花了不少时间才慢慢弄好,故留个痕 ...

  2. MySQL存储过程之游标实战

    MySQL存储过程之游标实战 ​ 博主日前在解决一个项目需求时,没有什么好的方法,于是就来学习存储过程了,之前也是接触过,奈何年少贪玩,竟是全部又还给了大学老师-苦不堪言呐-. ​ 先说一下业务需求吧 ...

  3. MariaDB MariaDB、MySQL存储过程、游标基础应用举例说明

    MariaDB.MySQL存储过程.游标基础应用举例说明 by:授客 QQ:1033553122 测试环境: MariaDB-10.0.19-centos7-x86_64 实践操作: # 创建测试数据 ...

  4. MYSQL存储过程、游标、触发器

    MySQL5 中添加了存储过程的支持. 大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成  存储过程简单来说,就是为以后的使用而保存的一 ...

  5. mysql存储过程之游标

    MySQL5 中添加了存储过程的支持.     大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成     存储过程简单来说,就是为以后的 ...

  6. MYSQL学习拓展一:MySQL 存储过程之游标的使用!

    一.MySQL游标的概念 游标介绍: MySQL的游标(cursor)是一个重要的概念,通过查找资料与自己的理解,主要得出以下几点关于自己的理解. 有数据缓冲的思想:游标的设计是一种数据缓冲区的思想, ...

  7. MySQL存储过程和游标

    一.存储过程 什么是存储过程,为什么要使用存储过程以及如何使用存储过程,并且介绍创建和使用存储过程的基本语法. 什么是存储过程: 存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些 ...

  8. 解析MySQL存储过程的游标执行过程

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 内容提纲 一.测试环境搭建 二.执行过程解析 三.注意事项 一.测试环境搭建 首先创建一张表,并插入几行数据字段: CRE ...

  9. Mysql 存储过程使用游标

    -- 完整例子 CREATE PROCEDURE test BEGIN -- 定义参数    DECLARE _id INT; -- 定义游标    DECLARE no_more_products ...

  10. MySQL存储过程-->通过游标遍历和异常处理迁移数据到历史表

    -- 大表数据迁移,每天凌晨1点到5点执行,执行间隔时间10分钟,迁移旧数据到历史表. DELIMITER $$ USE `dbx`$$ DROP PROCEDURE IF EXISTS `pro_x ...

随机推荐

  1. 查看cics 运行状态

     查看cics 运行状态cicscp -v status all 

  2. Sublime Text 2 常用快捷键

    Sublime Text 2 常用的快捷键 (不包含插件快捷键) Ctrl+P 打开文件搜索框,可以直接输入文件名搜索,或者输入@funcName 可以直接到函数定义处,输入#key 可以直接查找,输 ...

  3. POJ C++程序设计 编程题#3 编程作业—文件操作与模板

    编程题#3: 整数的输出格式 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 利 ...

  4. Clearing Search Values

      Use the SearchClear() method which is part of the Field class to clear search values on a particul ...

  5. sql批量修改插入数据

    1.批量修改 select 'update 读者库 set 单位代码='''+新单位代码+''' where 单位代码='''+单位代码+'''' from 读者单位 ,)<'L' and is ...

  6. partial class 说明

    C# 2.0 可以将类.结构或接口的定义拆分到两个或多个源文件中,在类声明前添加partial关键字即可. 例如:下面的PartialTest类 class PartialTest { string ...

  7. PHPExcel操作sae的storage上的文件

    在用PHPexcel操作excel的时候,在本地是好使的,但是把代码部署到sae就不好使了.会遇到如下问题: 文件的操作被拒绝. 这个原因就是sae上的应用文件是不允许改动的.sae提供的文件方案是使 ...

  8. Silverlight Color的颜色值

    1.MainPage.xaml <UserControl xmlns:SysManage="clr-namespace:Application" x:Class=" ...

  9. MongoDB(3):小的细节问题

    1.文档 {“greeting”:“hello,world”,“foo”: 3} 文档中的键/值对是有序的,下面的文档与上面的文档是完全不同的两个文档. {“foo”: 3 ,“greeting”:“ ...

  10. Mysql varchar大小长度问题介绍

    如果被 varchar 超过上述的 b 规则,被强转成 text 类型,则每个字段占用定义长度为 11 字节,当然这已经不是 varchar 了4.0版本以下,varchar(20),指的是20字节, ...