MySQL 存储过程控制语句

  1. 变量作用域
    内部的变量在其作用域范围内享有更高的优先权,当执行到end。变量时,内部变量消失,此时已经在其作用域外,变量不再可见了,应为在存储过程外再也不能找到这个申明的变量,但是你可以通过out参数或者将其值指派给会话变量来保存其值。
    mysql > DELIMITER //  
    mysql > CREATE PROCEDURE proc3()  
         -> begin 
         -> declare x1 varchar(5) default 'outer';  
         -> begin 
         -> declare x1 varchar(5) default 'inner';  
         -> select x1;  
         -> end;  
         -> select x1;  
         -> end;  
         -> //  
    mysql > DELIMITER ;
  2. 条件语句
    • if-then -else 语句
      mysql > DELIMITER //  
      mysql > CREATE PROCEDURE proc2(IN parameter int)  
           -> begin 
           -> declare var int;  
           -> set var=parameter+1;  
           -> if var=0 then 
           -> insert into t values(17);  
           -> end if;  
           -> if parameter=0 then 
           -> update t set s1=s1+1;  
           -> else 
           -> update t set s1=s1+2;  
           -> end if;  
           -> end;  
           -> //  
      mysql > DELIMITER ;  
    • case 语句
      mysql > DELIMITER //  
      mysql > CREATE PROCEDURE proc3 (in parameter int)  
           -> begin 
           -> declare var int;  
           -> set var=parameter+1;  
           -> case var  
           -> when 0 then   
           -> insert into t values(17);  
           -> when 1 then   
           -> insert into t values(18);  
           -> else   
           -> insert into t values(19);  
           -> end case;  
           -> end;  
           -> //  
      mysql > DELIMITER ; 
  3. 循环语句
    • while ···· end while 语句
      mysql > DELIMITER //  
      mysql > CREATE PROCEDURE proc4()  
           -> begin 
           -> declare var int;  
           -> set var=0;  
           -> while var<6 do  
           -> insert into t values(var);  
           -> set var=var+1;  
           -> end while;  
           -> end;  
           -> //  
      mysql > DELIMITER ; 
    • repeat···· end repeat 语句
      mysql > DELIMITER //  
      mysql > CREATE PROCEDURE proc5 ()  
           -> begin   
           -> declare v int;  
           -> set v=0;  
           -> repeat  
           -> insert into t values(v);  
           -> set v=v+1;  
           -> until v>=5  
           -> end repeat;  
           -> end;  
           -> //  
      mysql > DELIMITER ; 

      它在执行操作后检查结果,而while则是执行前进行检查。

    • loop ·····end loop 语句
      mysql > DELIMITER //  
      mysql > CREATE PROCEDURE proc6 ()  
           -> begin 
           -> declare v int;  
           -> set v=0;  
           -> LOOP_LABLE:loop  
           -> insert into t values(v);  
           -> set v=v+1;  
           -> if v >=5 then 
           -> leave LOOP_LABLE;  
           -> end if;  
           -> end loop;  
           -> end;  
           -> //  
      mysql > DELIMITER ;  

      loop循环不需要初始条件,这点和while 循环相似,同时和repeat循环一样不需要结束条件, leave语句的意义是离开循环。

  4. LABLES 标识
    LABLES(例如 LOOP_LABLE:)可以用在begin repeat while 或者loop 语句前,语句标号只能在合法的语句前面使用。可以跳出循环,使运行指令达到复合语句的最后一步。
  5. ITERATE 迭代
    mysql > DELIMITER //  
    mysql > CREATE PROCEDURE proc10 ()  
         -> begin 
         -> declare v int;  
         -> set v=0;  
         -> LOOP_LABLE:loop  
         -> if v=3 then   
         -> set v=v+1;  
         -> ITERATE LOOP_LABLE;  
         -> end if;  
         -> insert into t values(v);  
         -> set v=v+1;  
         -> if v>=5 then 
         -> leave LOOP_LABLE;  
         -> end if;  
         -> end loop;  
         -> end;  
         -> //  
    mysql > DELIMITER ; 

    通过引用复合语句的标号,来从新开始复合语句

原文地址:https://www.cnblogs.com/tannerBG/p/4079074.html