MySQL存储过程
1. 创建存储过程
mysql> delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
-> BEGIN
-> DELETE FROM MATCHES
-> WHERE playerno = p_playerno;
-> END$$
mysql> delimiter; #将语句的结束符号恢复为分号
2. 调用存储过程
call delete_matches(57);
3. 存储过程的参数
MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN(输入参数),OUT(输出参数),INOUT,形式如:
create procedure in_param(in p_in int)
create procedure out_param(out p_out int)
create procedure inout_param(inout p_inout int)
4. 变量
- 变量定义 DECLARE l_varchar varchar(255);
- 变量赋值 SET 变量名 = 表达式值
5. 查看数据库下面有哪些存储过程
show procedure status;
6. 存储过程控制语句
- 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语句
case
when var=0 then
insert into t values(30);
when var>0 then
when var<0 then
else
end case
- 循环语句 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 它在执行操作后检查结果,而 while 则是执行前进行检查。
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 ;
- 循环语句 loop ·····endloop
loop 循环不需要初始条件,这点和 while 循环相似,同时和 repeat 循环一样不需要结束条件, leave 语句的意义是离开循环。
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 ;
- ITERATE迭代
这两个语句ITERATE是用来跳出本次循环,进入下一个循环的,LEAVE是跳出整个循环。 - 游标的使用
//声明游标
DECLARE cur CURSOR FOR
DECLARE c_file_code varchar(255);
select file_code from t_cust_file;
//设置结束标志
//这条语句定义了一个 CONTINUE HANDLER,它是在条件出现时被执行的代码。这里,它指出当 SQLSTATE '02000'出现时,SET done=1 。SQLSTATE '02000'是一个未找到条件当while由于没有更多的行供循环而不能继续时,出现这个条件
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
//打开游标
OPEN cur ;
FETCH cur INTO c_file_code;
/* 循环体 */
WHILE ( done != 1) DO
/*更新数据表*/
UPDATE t_image SET i_status = '1' WHERE file_code = c_file_code;
COMMIT;
/*取出下一个值放c_file_code中*/
FETCH cur INTO c_file_code;
END WHILE;
/*关闭游标*/
CLOSE cur;
本文深入讲解MySQL存储过程的创建、调用及控制语句,包括参数类型、变量定义与赋值、流程控制如if-then-else、case、循环语句,以及游标的使用等核心内容。

1398

被折叠的 条评论
为什么被折叠?



