MySQL存储过程

本文深入讲解MySQL存储过程的创建、调用及控制语句,包括参数类型、变量定义与赋值、流程控制如if-then-else、case、循环语句,以及游标的使用等核心内容。

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; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值