
------------------------------------------------------# Oracle PL/SQL 判断循环练习题10道中等~偏难约束**禁止使用游标、异常处理、触发器**只允许IF/ELSIF/ELSE、CASE、LOOP/EXIT、WHILE LOOP、FOR LOOP、变量、简单DML、赋值、输出DBMS_OUTPUT。 环境Oracle 11g/19c全部块为 PL/SQL 匿名块不建触发器、不写EXCEPTION、不使用cursor。## 题目1FOR循环多分支IF中等编写PL/SQL匿名块输出1‑100之间所有数字规则1. 是3的倍数输出Fizz2. 是5的倍数输出Buzz3. 同时是3和5倍数输出FizzBuzz4. 其他输出数字本身。要求使用FOR循环IF‑ELSIF多分支。declarebeginfor i in 1..100loopif mod(i,3)0 and mod(i,5)0 thendbms_output.put_line(Fizz);elsif mod(i,5) 0 thendbms_output.put_line(Buzz);elsif mod(i,3)0 thendbms_output.put_line(FizzBuzz);elsedbms_output.put_line(i);end if;end loop;end;## 题目2WHILE循环嵌套IF中等给定数字变量v_n : 12345用WHILE循环逐位拆解整数**计算每一位数字的总和**。 示例12345 → 012345 15不允许转为字符串截取只用数学运算取模、除法。declareV_n number:12345;n number:0;a number;begina:V_n;while a0loopn:nmod(a,10);a : trunc(a/10);end loop;end;## 题目3LOOP EXIT循环CASE中等偏上使用LOOP ... EXIT WHEN循环实现求不大于1000的所有7的倍数统计两个结果- 满足条件数字的总个数- 所有数字累加和使用CASE表达式做条件判断最后dbms_output打印个数与总和。declaren number:1;v_count number:0;V_sum number:0;beginloopif mod(n,7)0 thenv_count:v_count1;end if;v_sum:v_sumn;n:n1;exit when n1001;end loop;dbms_output.put_line( v_count || v_sum );end;## 题目4FOR循环嵌套IF中等偏上打印九九乘法表PL/SQL匿名块两层FOR嵌套循环输出控制台格式化乘法表。## 题目5循环复合IF条件中等变量v_max :50计算1~v_max区间同时满足1. 是偶数2. 不能被4整除求这一类数字的累加总和使用FOR循环多条件IF判断输出最终总和。declareV_max number:50;n number :0 ;beginfor i in 1..V_maxloopif mod(i,2)0 and mod(i,4)0 thenn:n i;end if;end loop;dbms_output.put_line(n);end;## 题目6LOOP循环区间判断偏难给定初始值v_x:2使用无条件LOOP循环每次v_x v_x *3循环退出条件v_x 2000循环内部如果v_x大于100且小于1000则打印该值其他数值不打印。最后输出循环一共执行多少次。declarev_x number:2;n number:0;m number:0;beginloopif v_x between 100 and 1000 thendbms_output.put_line(v_x);m :m1;end if;n:n1; -------------------计数v_x : v_x *3;exit when v_x2000;end loop;dbms_output.put_line(n||m);end;## 题目7WHILE嵌套IF中等偏上实现斐波那契数列输出小于500的全部斐波那契数字1,1,2,3,5,8…WHILE循环if控制输出不使用数组只用普通数值变量迭代。declaren number:1;m number:0;a number:1;beginwhile n500loopdbms_output.put_line(n);dbms_output.put_line(a);m:na;n:m;end loop;end;declarea number : 1;b number : 1;s number;begindbms_output.put_line(a);dbms_output.put_line(b);while a b 500loops : a b;dbms_output.put_line(s);a : b;b : s;end loop;end;## 题目8FOR循环CASE搜索式偏难遍历1‑60数字根据数字区间做分类统计- [1,20] A类计数- [21,40]B类计数- [41,60]C类计数使用**搜索CASE**做分支FOR循环最后输出A/B/C三类各自计数。declarea number:0;b number:0;c number:0;beginfor i in 1..60loopif i between 1 and 20 thena:a1;elsif i between 21 and 40 thenb:b1;elsif i between 41 and 60 thenc:c1;end if ;end loop;dbms_output.put_line(a||b||c);end;## 题目9双重LOOPIF判断偏难外层LOOP循环i从2到8内层LOOP循环j从2到i当 i mod j 0 立刻退出内层循环内层结束后判断如果 j i说明i是质数打印i。功能输出2‑8之间全部质数。禁止游标只用LOOPEXIT WHEN。declarei number : 2;j number;beginloopj : 2;loopexit when mod(i, j) 0;----成立了 可定不是质数j : j 1;exit when j i;end loop;if j i thendbms_output.put_line(i);end if;i : i 1;exit when i 8;end loop;end;## 题目10循环多条件组合判断综合偏难给定变量v_total:0遍历1‑200满足下面**任意一个条件**就要累加到v_total1. 能被7整除2. 数字包含数字9数学运算取模/除法判断**禁止转字符串**FOR循环IF多条件逻辑最后输出v_total最终结果。declareV_total number : 0;beginfor i in 1..200 loopif mod(i, 7) 0 or (mod(trunc(i / 10), 10) 9 or mod(i, 10) 9) thendbms_output.put_line(i);V_total : V_total i;end if;end loop;dbms_output.put_line(V_total);end;---# 参考答案示例选2道给参考方便讲课### T2 参考答案数字按位求和 WHILEplsqlDECLAREv_n NUMBER : 12345;v_sum NUMBER : 0;v_temp NUMBER;BEGINv_temp : v_n;WHILE v_temp 0 LOOPv_sum : v_sum MOD(v_temp,10);v_temp : TRUNC(v_temp / 10);END LOOP;DBMS_OUTPUT.PUT_LINE(各位和||v_sum);END;/### T7 斐波那契 WHILE示例plsqlDECLAREv_a NUMBER :1;v_b NUMBER :1;v_c NUMBER;BEGINDBMS_OUTPUT.PUT_LINE(v_a);DBMS_OUTPUT.PUT_LINE(v_b);WHILE v_a v_b 500 LOOPv_c : v_a v_b;DBMS_OUTPUT.PUT_LINE(v_c);v_a : v_b;v_b : v_c;END LOOP;END;/如果你需要我可以把**10道题全部完整参考答案一次性输出**或者生成可复制的试卷文本适合直接给学生做题。