Oracle中的循環(huán)之FOR循環(huán)、WHILE循環(huán)和LOOP循環(huán)詳解
Oracle中的循環(huán)常用的有:FOR循環(huán)、WHILE循環(huán)和LOOP循環(huán)
一、FOR循環(huán)
1.FOR循環(huán)語法結構
DECLARE --不聲明變量,可以不寫
BEGIN
FOR 循環(huán)變量 IN 1..10循環(huán)下限 .. 循環(huán)上限 LOOP ------循環(huán)變量 每次自增1
循環(huán)體;
END LOOP;
END;示例:循環(huán)打印1~10
declare
begin
for i in 1..10
loop
DBMS_OUTPUT.PUT_LINE(i);
end loop;
end;
示例:用戶輸入一個數(shù)字X,循環(huán)打印 1~X
declare
x number:=:input;
begin
for i in 1..x
loop
DBMS_OUTPUT.PUT_LINE(i);
end loop;
end;
示例:用戶輸入一個數(shù)字X,打印 1+2+3+..+X 的和是多少
declare
x number := :input;
v number := 0;-- 需要有一個變量存放每次累加后的和
begin
for i in 1..x
loop
v := v + i;
end loop;
DBMS_OUTPUT.PUT_LINE(v);
end;

計算 1 到 10 的數(shù)字中偶數(shù)的累加值
declare
v number := 0;-- 需要有一個變量存放每次累加后的和
begin
for i in 1..10
loop
v := v + i;
end loop;
DBMS_OUTPUT.PUT_LINE(v);
end; -- 55二、WHILE循環(huán)
1.WHILE循環(huán)語法結構
DECLARE
BEGIN
WHILE 進入循環(huán)的條件 LOOP
--循環(huán)體
END LOOP;
END;示例:循環(huán)打印1~10 以及 輸出格式:
- 編碼:1
- 編碼:2
- ...
DECLARE
v number := 1; -- 聲明循環(huán)變量
BEGIN
WHILE v <= 10
loop
DBMS_OUTPUT.PUT_LINE('編碼:' || v);
v := v + 1; -- 自增
end loop;
end;
示例:打印100以內(nèi),所有偶數(shù)(大于0 從2開始到100結束)
DECLARE
v number := 2;
BEGIN
WHILE v <= 100
loop
DBMS_OUTPUT.PUT_LINE(v);
v := v + 2; -- 自增
end loop;
end;示例:接收用戶輸入的數(shù)字 X,判斷 X 大于10 則 打印"您輸入的值過大,請重新輸入!" ,如果不大于10,則打印 X 的階乘,比如輸入 6 ,輸出 "6的階乘為 720"
declare
x number := :input; -- 輸入值
i number := 1;-- 計數(shù)器
v number := 1;-- 階乘累加值
begin
if x > 10 then
DBMS_OUTPUT.PUT_LINE('您輸入的值過大,請重新輸入!');
else
while i <= x -- 一定是計數(shù)器<=輸入值(上限)
loop
v := v * i;
i := i + 1;-- 計數(shù)器+1
end loop;
DBMS_OUTPUT.PUT_LINE(x || '的階乘為:' || v);
end if;
end;綜合練習:
分別使用FOR循環(huán)和WHILE循環(huán),計算1 到 10 的累加值
-- FOR循環(huán)
declare
v number := 0; -- 存放累加值
begin
for i in 1..10
loop
v := v + i;
end loop;
DBMS_OUTPUT.PUT_LINE('1~10的累加值為:' || v);
end;
-- WHILE循環(huán)
declare
i number := 1;-- 存放初始值
v number := 0; -- 存放累加值
begin
while i <= 10
loop
v := v + i;
i := i + 1;
end loop;
DBMS_OUTPUT.PUT_LINE('1~10的累加值為:' || v);
end;分別使用FOR循環(huán)和WHILE循環(huán),計算1 到 10 偶數(shù)的累加值
-- FOR循環(huán)
declare
v number := 0; -- 存放累加值
begin
for i in 1..10
loop
if mod(i, 2) = 0 then
v := v + i;
end if;
end loop;
DBMS_OUTPUT.PUT_LINE('1~10的偶數(shù)累加值為:' || v);
end;
-- WHILE循環(huán)
declare
i number := 1;-- 存放初始值
v number := 0; -- 存放累加值
begin
while i <= 10
loop
if mod(i, 2) = 0 then
v := v + i;
end if;
i := i + 1;
end loop;
DBMS_OUTPUT.PUT_LINE('1~10的偶數(shù)累加值為:' || v);
end;三、LOOP循環(huán)
1.LOOP循環(huán)語法結構
DECLARE
--聲明
BEGIN
LOOP
------循環(huán)體
IF 跳出該循環(huán)的條件 THEN
EXIT;
END IF;
END LOOP;
END;
-----
DECLARE
--聲明
BEGIN
LOOP
------循環(huán)體
EXIT WHEN 跳出該循環(huán)的條件;
END LOOP;
END;示例:打印 1 到 100 的數(shù)字中偶數(shù)
declare
i number := 2;-- 初始值為2
begin
loop
DBMS_OUTPUT.PUT_LINE(i);
i := i + 2;
if i > 100 then
exit ;
end if;
end loop;
end;
declare
i number := 2;-- 初始值為2
begin
loop
DBMS_OUTPUT.PUT_LINE(i);
i := i + 2;
exit when i > 100;
end loop;
end;練習:計算 1到 10奇數(shù)的累加 --loop
declare
i number := 1;-- 初始值為1
v_sum number := 0;-- 存放累加值
begin
loop
if mod(i, 2) = 1 then
v_sum := v_sum + i;
end if;
i := i + 1;
exit when i > 10;
end loop;
DBMS_OUTPUT.PUT_LINE('1-10奇數(shù)的累加值為:' || v_sum);
end;
-- 方法二
declare
i number := 1;-- 初始值為1
v_sum number := 0;-- 存放累加值
begin
loop
v_sum := v_sum + i;
i := i + 2;
exit when i > 10;
end loop;
DBMS_OUTPUT.PUT_LINE('1-10奇數(shù)的累加值為:' || v_sum);
end;四、三個循環(huán)的區(qū)別(重要)
1.FOR 循環(huán) 不需要設置i自增,因為默認就是自增1
- FOR i IN 10..100 LOOP
- 要做的事情
- END LOOP;
2.WHILE 循環(huán) 需要設置變量自增,且循環(huán)條件放在 WHILE 后面
- WHILE 循環(huán)的條件(J <=10) LOOP
- 要做的事情
- 變量的遞增(遞減)--變量肯定要重新賦值,不然就是死循環(huán)
- END LOOP;
3.LOOP 循環(huán) 需要設置變量自增,且退出循環(huán)的條件放到 IF 后
- LOOP
- 想做的事情
- IF 退出循環(huán)的場景
THEN EXIT; END IF; END LOOP;
假設有100塊錢,打算買100只雞,公雞一只5元,母雞一只3元,小雞3只1元,請問100塊錢剛好花完,每種雞至少買1只,每種雞各可以買多少?
BEGIN
FOR g IN 1..20
LOOP
FOR m IN 1..33
LOOP
FOR x IN 1..100
LOOP
IF g + m + x = 100 AND 5 * g + 3 * m + x / 3 = 100 THEN
dbms_output.put_line('公雞:' || g || ' 母雞:' || m || ' 小雞:' || x);
END IF;
END LOOP;
END LOOP;
END LOOP;
END;
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Oracle出現(xiàn)超出打開游標最大數(shù)的兩種解決方法
當Oracle數(shù)據(jù)庫中打開的游標數(shù)超過了數(shù)據(jù)庫的最大游標數(shù)限制時,就會出現(xiàn)“超出打開游標最大數(shù)”的錯誤,本文給大家介紹了幾種常見的解決方法,需要的朋友可以參考下2024-02-02
OracleOraDb10g_home1TNSListener服務無法啟動怎么解決
這篇文章主要介紹了OracleOraDb10g_home1TNSListener服務無法啟動的解決辦法,有需要的朋友可以參考本教程的解決方法2016-05-05
Oracle數(shù)據(jù)庫面試寶典之db?file?parallel?read等待事件處理過程
db file parallel read是Oracle數(shù)據(jù)庫中的一種等待事件,通常與使用并行查詢或并行加載數(shù)據(jù)時的I/O操作有關,這篇文章主要介紹了Oracle數(shù)據(jù)庫面試寶典之db?file?parallel?read等待事件處理過程的相關資料,需要的朋友可以參考下2025-10-10
Oracle數(shù)據(jù)庫的使用及說明介紹Linux
這篇文章主要介紹了Oracle數(shù)據(jù)庫的使用及說明Linux,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2026-03-03
QT連接Oracle數(shù)據(jù)庫并實現(xiàn)登錄驗證的操作步驟
這篇文章主要介紹了QT連接Oracle數(shù)據(jù)庫并實現(xiàn)登錄驗證的操作步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01

