From d7954ef32638dd3bcf8e1d6a66a6980f35da7bc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=96=E5=BF=83=E5=A6=8D?= <2392642810@qq.com> Date: Tue, 10 Oct 2023 15:01:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...01\347\250\213\346\216\247\345\210\266.md" | 255 ++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 "03 \350\265\226\345\277\203\345\246\215/20231010 \346\265\201\347\250\213\346\216\247\345\210\266.md" diff --git "a/03 \350\265\226\345\277\203\345\246\215/20231010 \346\265\201\347\250\213\346\216\247\345\210\266.md" "b/03 \350\265\226\345\277\203\345\246\215/20231010 \346\265\201\347\250\213\346\216\247\345\210\266.md" new file mode 100644 index 0000000..06fb182 --- /dev/null +++ "b/03 \350\265\226\345\277\203\345\246\215/20231010 \346\265\201\347\250\213\346\216\247\345\210\266.md" @@ -0,0 +1,255 @@ +## 流程控制 + +### loop + +从 1-num 每次输出你好 + 数字,你好1……你好n + +```mysql +declare i int default 1; +a:loop -- 本质上是一个死循环,所以要在循环有个跳出循环的条件 + select concat('你好',i); + if i>num then leave a;end if; + -- 如果循环要用到leave(break),iterate(continue)这两种关键字,就一定给循环和标签符 + set i=i+1; -- 迭代的条件,修改变量 i 的值 +end loop a; +``` + +### repeat + +```mysql +repeat + select concat('你好',i); + set i=i+1; + until i>5 -- until 后面直接写跳到循环的条件且不写分号; +end repeat; + +-- repeat 循环至少执行一次 +``` + +### break + +即可用在循环中,跳出整个循环 + +### leave + +用在循环中,表示中止并跳出循环,也可以用在存储过程 + +```mysql +a:begin + if b=1 then leave a;end if; -- 如果达成条件则退出存储过程的执行 +end // +``` + +### iterate + +判断 1-num 是否为偶数,偶数跳过,奇数输出 + +```mysql +declare i int default 1; +b:while i<=num do + set i=i+1; + if i%2=1 then iterate b;end if; + select i-1; +end while b; +``` + + + +## 练习 + +写一个存储过程,可以输入一个整数,输入小于或等于0时,提示非法输入,并中止这个存储过程, +否则先判断这个数和是不是大于5,如果大于5就从1循环到这个数,并找出所有的偶数。小于等于5就提示数太小了,并退出。 + +要求,循环部分,要用三种语法分别做一遍 + +```mysql +-- while 循环 +drop procedure v_1; + +delimiter // +create procedure v_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 v_1(6); + + + +-- loop 循环 +drop procedure v_2; + +delimiter // +create procedure v_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 v_2(6); + + + +-- repeat 循环 +drop procedure v_3; + +delimiter // +create procedure v_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 v_3(6); +``` + +## 作业 + +写一个存储过程,可以输入一个整数,输入小于或等于0时,提示非法输入,并中止这个存储过程, +否则先判断这个数和是不是大于20,如果大于20就从1循环到这个数,并找出所有的偶数(但遇到逢10的数要跳过)。小于等于20就提示数太小了,并退出。 + +要求,循环部分,要用三种语法分别做一遍 + +```mysql +-- while 循环 +drop procedure v_4; + +delimiter // +create procedure v_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 v_5(21); + + + +-- repeat 循环 +drop procedure v_6; + +delimiter // +create procedure v_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 v_6(21); +``` + -- Gitee