循环结构

116 阅读2分钟
循环结构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();

游标---->(变量之后)

#游标的使用步骤 /*

  1. 声明游标
  2. 打开游标
  3. 使用游标-->(从游标中获取数据)
  4. 关闭游标 */
#创建存储过程“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;