很多小伙伴都知道使用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 |
+------+
实际结果和测试情况一致。
就简单的记录到此,希望对你有帮助。