From 60d432de317ab31c8e7d543f9b18d87a74293579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=88=92=E6=B1=B6?= <3228916049@qq.com> Date: Wed, 11 Oct 2023 02:11:50 +0000 Subject: [PATCH] =?UTF-8?q?10.10=E5=BE=AA=E7=8E=AF=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李舒汶 <3228916049@qq.com> --- .../10.10\345\276\252\347\216\257.md" | 266 ++++++++++++++++++ 1 file changed, 266 insertions(+) create mode 100644 "49 \346\235\216\350\210\222\346\261\266/10.10\345\276\252\347\216\257.md" diff --git "a/49 \346\235\216\350\210\222\346\261\266/10.10\345\276\252\347\216\257.md" "b/49 \346\235\216\350\210\222\346\261\266/10.10\345\276\252\347\216\257.md" new file mode 100644 index 0000000..b1e42ab --- /dev/null +++ "b/49 \346\235\216\350\210\222\346\261\266/10.10\345\276\252\347\216\257.md" @@ -0,0 +1,266 @@ +### 复习 + +```mysql +-- 变量,参数 +-- 变量的赋值,所有变量都有两种方式 +set 变量名1 = 值1,变量名2 = 值2,...;-- 一条赋值语句,可以同时给多个变量赋值,每个变量用','隔开 +set @a=1,@a=2 +select @a 变量1,@a 变量2 +select 110,120 into @a,@b,@c;-- select into 形式给多个变量赋值,要求字段的数量要和变量数量一致 +``` + + + +### 循环结构之REPEAT + +```mysql +[repeat_label:] REPEAT +循环体的语句 +UNTIL 结束循环的条件表达式 +END REPEAT [repeat_label] +``` + +repeat_label为REPEAT语句的标注名称,该参数可以省略;REPEAT语句内的语句或语句群被重复,直至 expr_condition为真。 + +例题 + +```mysql +DELIMITER // +CREATE PROCEDURE test_repeat() +BEGIN + DECLARE i INT DEFAULT 0; + REPEAT + SET i = i + 1; + UNTIL i >= 10 + END REPEAT; + SELECT i; +END // +DELIMITER ; +``` + +-- 写一个存储过程,可以输入一个整数,输入小于或等于0时,提示非法输入,并中止这个存储过程, +-- 否则先判断这个数和是不是大于20,如果大于20就从1循环到这个数,并找出所有的偶数(但遇到逢10的数要跳过)。小于等于20就提示数太小了,并退出。 + +-- 要求,循环部分,要用三种语法分别做一遍 + +```mysql +对比三种循环结构:** + +1. 这三种循环都可以省略名称,但如果循环中添加了循环控制语句(LEAVE或ITERATE)则必须添加名称。 + +2. LOOP:一般用于实现简单的"死"循环 WHILE:先判断后执行 + +3. REPEAT:先执行后判断,无条件至少执行一次 +``` + +```mysql +DELIMITER // +CREATE PROCEDURE test1(in num int) +a:BEGIN + DECLARE i INT DEFAULT 1; + if num<=0 then select '非法输入,已退出程序';leave a; + elseif num<=20 then select '太小了,已退出程序';leave a; + else + b:loop + if i%2=0 then select i ; + end if; + if i>=num then leave b; + end if; + end loop; + end if; +END // +DELIMITER ; +call test1(1) +``` + +```mysql +## 练习 + +写一个存储过程,可以输入一个整数,输入小于或等于0时,提示非法输入,并中止这个存储过程, +否则先判断这个数和是不是大于5,如果大于5就从1循环到这个数,并找出所有的偶数。小于等于5就提示数太小了,并退出。 + +要求,循环部分,要用三种语法分别做一遍 + +```mysql +-- while 循环 +drop procedure mp_1; + +delimiter // +create procedure mp_1(in num int) +a:begin + declare i int default 1; + if num<=0 then + select '非法输入';leave a; + else + if num>5 then + while i<=num do + if i%2=0 then + select i; + end if; + set i=i+1; + end while; + else + select '数太小了';leave a; + end if; + end if; +end // + +call mp_1(8); + + + +-- loop 循环 +drop procedure mp_2; + +delimiter // +create procedure mp_2(in num int) +a:begin + declare i int default 1; + if num<=0 then + select '非法输入'; + leave a; + else + if num>5 then + b:loop + if i%2=0 then + select i; + end if; + set i=i+1; + if i>num then leave b; + end if; + end loop b; + else + select '数太小了';leave a; + end if; + end if; +end // + +call mp_2(10); + + + +-- repeat 循环 +drop procedure mp_3; + +delimiter // +create procedure mp_3(in num int) +a:begin + declare i int default 1; + if num<=0 then + select '非法输入';leave a; + elseif num>5 then + repeat + if i%2=0 then + select i; + end if; + set i=i+1; + until i>num + end repeat; + else + select '数太小了';leave a; + end if; +end // + +call mp_3(4); +``` + +## 作业 + +写一个存储过程,可以输入一个整数,输入小于或等于0时,提示非法输入,并中止这个存储过程, +否则先判断这个数和是不是大于20,如果大于20就从1循环到这个数,并找出所有的偶数(但遇到逢10的数要跳过)。小于等于20就提示数太小了,并退出。 + +要求,循环部分,要用三种语法分别做一遍 + +```mysql +-- while 循环 +drop procedure mp_4; + +delimiter // +create procedure mp_4(in num int) +a:begin + declare i int default 0; + if num<=0 then + select '非法输入'; leave a; + else + if num>20 then + b:while i20 then + b:loop + set i=i+1; + if i%10=0 then + iterate b; + elseif i%2=0 then + select i; + end if; + if i=num then leave b; + end if; + end loop b; + else + select '数太小了';leave a; + end if; + end if; +end // + +call mp_5(15); + + + +-- repeat 循环 +drop procedure mp_6; + +delimiter // +create procedure mp_6(in num int) +a:begin + declare i int default 1; + if num<=0 then + select '非法输入';leave a; + elseif num>5 then + b:repeat + set i=i+1; + if i%10=0 then + iterate b; + elseif i%2=0 then + select i; + end if; + until i=num + end repeat b; + else + select '数太小了';leave a; + end if; +end // + +call mp_6(65); +``` + + + +``` + + -- Gitee