MySQL存储过程详解(四)

2014-11-24 08:19:31 · 作者: · 浏览: 21
-> //

14.mysql > DELIMITER ;

4. MySQL存储过程的调用

用call和你过程名以及一个括号,括号里面根据需要,加入参数,参数包括输入参数、输出参数、输入输出参数。具体的调用方法可以参看上面的例子。

5. MySQL存储过程的查询

我们像知道一个数据库下面有那些表,我们一般采用showtables;进行查看。那么我们要查看某个数据库下面的存储过程,是否也可以采用呢?答案是,我们可以查看某个数据库下面的存储过程,但是是令一钟方式。

我们可以用

selectname from mysql.proc where db=’数据库名’;

或者

selectroutine_name from information_schema.routines where routine_schema='数据库名';

或者

showprocedure status where db='数据库名';

进行查询。

如果我们想知道,某个存储过程的详细,那我们又该怎么做呢?是不是也可以像操作表一样用describe 表名进行查看呢?

答案是:我们可以查看存储过程的详细,但是需要用另一种方法:

SHOWCREATE PROCEDURE 数据库.存储过程名;

就可以查看当前存储过程的详细。

6. MySQL存储过程的修改

ALTER PROCEDURE

更改用CREATE PROCEDURE 建立的预先指定的存储过程,其不会影响相关存储过程或存储功能。

7. MySQL存储过程的删除

删除一个存储过程比较简单,和删除表一样:

DROPPROCEDURE

从MySQL的表格中删除一个或多个存储过程。

8. MySQL存储过程的控制语句

(1). 变量作用域

内部的变量在其作用域范围内享有更高的优先权,当执行到end。变量时,内部变量消失,此时已经在其作用域外,变量不再可见了,应为在存储

过程外再也不能找到这个申明的变量,但是你可以通过out参数或者将其值指派

给会话变量来保存其值。

1. mysql > DELIMITER //

2. mysql > CREATE PROCEDURE proc3()

3. -> begin

4. -> declare x1 varchar(5) default 'outer';

5. -> begin

6. -> declare x1 varchar(5) default 'inner';

7. -> select x1;

8. -> end;

9. -> select x1;

10. -> end;

11. -> //

12.mysql > DELIMITER ;

(2). 条件语句

Ⅰ. if-then -else语句

1. mysql > DELIMITER //

2. mysql > CREATE PROCEDURE proc2(IN parameter int)

3. -> begin

4. -> declare var int;

5. -> set var=parameter+1;

6. -> if var=0 then

7. -> insert into t values(17);

8. -> end if;

9. -> if parameter=0 then

10. -> update t set s1=s1+1;

11. -> else

12. -> update t set s1=s1+2;

13. -> end if;

14. -> end;

15. -> //

16.mysql > DELIMITER ;

Ⅱ. case语句:

1. mysql > DELIMITER //

2. mysql > CREATE PROCEDURE proc3 (in parameter int)

3. -> begin

4. -> declare var int;

5. -> set var=parameter+1;

6. -> case var

7. -> when 0 then

8. -> insert into t values(17);

9. -> when 1 then

10. -> insert into t values(18);

11. -> else

12. -> insert into t values(19);

13. -> end case;

14. -> end;

15. -> //

16.mysql > DELIMITER ;

(3). 循环语句

Ⅰ. while ····end while:

1. mysql > DELIMITER //

2. mysql > CREATE PROCEDURE proc4()

3. -> begin

4. -> declare var int;

5. -> set var=0;

6. -> while var<6 do

7. -> insert into t values(var);

8. -> set var=var+1;

9. -> end while;

10. -> end;

11. -> //

12.mysql > DELIMITER ;

Ⅱ. repeat····end repeat:

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

1. mysql > DELIMITER //

2. mysql > CREATE PROCEDURE proc5 ()

3. -> begin

4. -> declare v int;

5. -> set v=0;

6. -> repeat

7. -> insert into t values(v);

8. -> set v=v+1;

9. -> until v>=5

10. -> end repeat;

11. -> end;

12. -> //

13.mysql > DELIMITER ;

Ⅲ. loop ·····end loop:

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

1. mysql > DELIMITER //

2. mysql > CREATE PROCEDURE proc6 ()

3. -> begin

4. -> declare v int;

5. -> set v=0;

6. -> LOOP_LABLE:loop

7. -> insert into t values(v);

8. -> set v=v+1;

9. -> if v >=5 then

10. -> leave LOOP_LABLE;

11. -> end if;

12. -> end loop;

13. -> end;

14. -> //

15.m