
------------------------------------------------------# 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道題全部完整參考答案一次性輸出**或者生成可復制的試卷文本適合直接給學生做題。