循环结构while
循环结构---->loop
#举例一:
CREATE PROCEDURE test_loop()
BEGIN
#声明局部变量
DECLARE num INT DEFAULT 1;
loop_label:LOOP #循环结构
#重新赋值
SET num = num +1;
IF num >= 10 THEN
LEAVE loop_label;
END IF;
END LOOP loop_label;
#查看num
SELECT num;
end;
#调用:
CALL test_loop();
循环结构while
WHILE 循环结构 DO
循环体
END WHILE;
#举例1:
CREATE PROCEDURE test_while()
BEGIN
#定义变量
DECLARE num INT DEFAULT 0;
#循环结构
while_label:WHILE num < 10 DO
#循环体
#....
#迭代条件
SET num = num + 1;
END WHILE;
END;
#调用
CALL test_while();
#循环结构repeat
/*
[repeat_lable:] REPEAT 循环体 UNTIL 判断条件 END REPEAT:[repeat_lable];
*/
#举例1
CREATE PROCEDURE test_repeat()
BEGIN
#声明变量
declare num INT default 1;
#循环repeat
REPEAT
SET num = num + 1;
UNTIL num>10 END REPEAT;
#查看
SELECT num;
END;
LEAVE的使用
#举例1:创建存储过程 “leave_begin()”,声明INT类型的IN参数num。给BEGIN...END加标记名,并在 #BEGIN...END中使用IF语句判断num参数的值。 ####如果num>2,则查询“employees”表的最高薪资。 #IF语句结束后查询“employees”表的总人数。
CREATE PROCEDURE leave_begin(IN num INT)
begin_label: BEGIN
IF num <= 0 THEN
LEAVE begin_label;
ELSEIF num = 1 THEN
SELECT AVG(salary)
FROM employees;
ELSEIF num = 2 THEN
SELECT MIN(salary)
FROM employees;
ELSE
SELECT MAX(salary)
FROM employees;
END IF;
#查询总人数
SELECT COUNT(employee_id)
FROM employees;
END;
#调用
CALL leave_begin(1);
跳出循环--->iterate
ITERATE 理解为 continue,意 #思为“再次循环”。 #语句基本格式如下: #label参数表示循环的标志。ITERATE语句必须跟在循环标志前面。 #举例: 定义局部变量num,初始值为0。循环结构中执行num + 1操作。
#如果num < 10,则继续执行循环;
#如果num > 15,则退出循环结构;
CREATE PROCEDURE test_iterate()
BEGIN
#定义局部变量
declare num INT default 0;
loop_iterate:LOOP
#赋值
SET num = num + 1;
#循环体
if num < 10 THEN ITERATE loop_iterate;
ELSEIF num > 15 THEN LEAVE loop_iterate; END IF;
END LOOP;
END;
#调用
CALL test_iterate();
游标---->(变量之后)
#游标的使用步骤 /*
- 声明游标
- 打开游标
- 使用游标-->(从游标中获取数据)
- 关闭游标 */
#创建存储过程“get_count_by_limit_total_salary()”,声明IN参数 limit_total_salary,#DOUBLE类型;声明
#OUT参数total_count,INT类型。函数的功能可以实现累加薪资最高的几个员工的薪资值,直到薪资总和
#达到limit_total_salary参数的值,返回累加的人数给total_count。
CREATE PROCEDURE get_count_by_limit_total_salary(IN limit_total_salary DOUBLE,OUT total_count INT)
BEGIN
#声明局部变量
declare sum_sal DOUBLE default 0.0; #记录累加的工资总和
DECLARE emp_sal DOUBLE; #记录每个员工的工资;
DECLARE emp_count INT DEFAULT 0 ; #记录累加的人数
#1.声明游标
declare emo_cursor CURSOR for SELECT salary FROM employees ORDER BY salary DESC;
#2.打开游标
OPEN emp_cursor;
#3.使用游标
c_loop:LOOP
if sum_sal >= limit_total_salary THEN LEAVE c_loop;
end if;
fetch emo_cursor INTO emp_sal;####
SET sum_sal = sum_sal + emp_sal;
SET emp_count = emp_count + 1;
END LOOP:c_loop ;
SET total_count = emp_count;
#4.关闭游标
CLOSE emo_cursor;
END;