思考:while循环是否只能使用在存储过程或者存储函数之中,不能直接在查询语句中使用?
———— 循环一般在存储过程和存储函数中使用。
直接放几个例子:
例一:
1.创建存储过程
DELIMITER $$
CREATE PROCEDURE test_while_001(IN in_count INT) # 创建存储过程 学习while循环的用法
BEGIN
DECLARE COUNT INT DEFAULT 0;
DECLARE SUM INT DEFAULT 0;
WHILE COUNT < in_count DO
SET SUM = SUM + COUNT;
SET COUNT = COUNT + 1;
END WHILE;
SELECT SUM;
END $$
DELIMITER ;
2.调用存储过程
CALL test_while_001(10); # 45 输出
3.删除存储过程
DROP PROCEDURE test_while_001;
例二:
1.创建函数
DELIMITER $$
CREATE FUNCTION my_test_function(quantity INT(10)) RETURNS INT(10) # 创建函数 学习while循环的用法
BEGIN
WHILE quantity MOD 12 > 0 DO
SET quantity = quantity + 1;
END WHILE;
RETURN quantity;
END $$
DELIMITER ;
注意:创建函数之前必须更改系统设置 否则无法创建函数
SET GLOBAL log_bin_trust_function_creators=TRUE;
2.调用函数
SELECT my_test_function(10);
SELECT my_test_function(24);
SELECT my_test_function(222);
3.删除函数
DROP FUNCTION my_test_function;
例三:
1.如果存在,则删除
DROP PROCEDURE IF EXISTS u_head_and_low_pro;
2.创建存储过程
DELIMITER $$
CREATE PROCEDURE u_head_and_low_pro()
BEGIN
DECLARE n INT DEFAULT 10;
SET n = n - 1;
WHILE n > 0 DO
SELECT n;
SET n = n - 1;
END WHILE;
END $$
DELIMITER ;
3.调用存储过程
CALL u_head_and_low_pro();
4.删除存储过程
DROP PROCEDURE u_head_and_low_pro;
注:不依赖于任何数据库表,完整展示变量、while语句、存储过程的用法。
例四:
# 创建存储过程
DELIMITER $$
CREATE PROCEDURE test_while()
BEGIN
DECLARE SUM INT DEFAULT 0;
DECLARE t INT DEFAULT 5;
WHILE t > 0 DO
SET SUM = SUM + t;
SET t = t - 1;
END WHILE;
SELECT SUM;
END $$
DELIMITER ;
# 调用存储过程
CALL test_while(); # 15
# 删除
DROP PROCEDURE test_while;
END 2018-05-22 13:11:34