现在的位置: 首页 > 综合 > 正文

mysql如何跳出存储过程的执行

2018年01月21日 ⁄ 综合 ⁄ 共 826字 ⁄ 字号 评论关闭

 很多小伙伴都知道使用leave label来跳出循环,但是在实际的需求可能需要跳出整个存储过程而mysql又不支持quit,exit或return的方式退出。

这里我们依然使用leave的方式来模拟exit的作用(见2)。

1,一般用法,跳出循环

 Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(p1 INT)
BEGIN
  label1: LOOP
    SET p1 = p1 + 1;
    IF p1 < 10 THEN 
     select 'repeate';
     ITERATE label1; 
    END IF;
    select 'skip';
    LEAVE label1; 
  END LOOP label1;
  SET @x = p1;
  select @x;  
END
执行
MariaDB [test]> call test(8);
+---------+
| repeate |
+---------+
| repeate |
+---------+
1 row in set (0.00 sec)
+------+
| skip |
+------+
| skip |
+------+
1 row in set (0.00 sec)
+------+
| @x   |
+------+
|   10 |
+------+  

2,直接跳出整个存储过程体
CREATE DEFINER=`root`@`localhost` PROCEDURE b (p int) 
label:begin 
declare i int ; 
set i=p; 
if i<1 then  leave label; 
else  select i ;
 end if ; 
end
调用如下:
传入参数小于1 直接跳出存储过程
 call b(-1);
Query OK, 0 rows affected (0.00 sec)
传入参数大于1 直接输出传入的值
call b(2); 
+------+
| i    |
+------+
|    2 |
+------+
实际结果和测试情况一致。
就简单的记录到此,希望对你有帮助。

抱歉!评论已关闭.