MySQL 存储过程控制语句

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

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

    • loop ·····end loop 语句
      mysql > DELIMITER //
      mysql > CREATE PROCEDURE proc6 ()
      -> begin
      -> declare v int;
      -> set v=;
      -> LOOP_LABLE:loop
      -> insert into t values(v);
      -> set v=v+;
      -> if v >= 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=;
    -> LOOP_LABLE:loop
    -> if v= then
    -> set v=v+;
    -> ITERATE LOOP_LABLE;
    -> end if;
    -> insert into t values(v);
    -> set v=v+;
    -> if v>= then
    -> leave LOOP_LABLE;
    -> end if;
    -> end loop;
    -> end;
    -> //
    mysql > DELIMITER ;

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

上一篇:bzoj 1005: [HNOI2008]明明的烦恼 prufer编号&&生成树计数


下一篇:关于PB调用Microsoft Web Browser控件的一些问题