編寫循環控制結構時,用戶可以使用基本循環,WHILE循環和FOR循環等三種類型的循環語句,下面分別介紹使用這三種循環語句的方法。
1.基本循環
LOOP
statement1;
......
EXIT [WHEN condition];
END LOOP;
當使用基本循環時,無論是否滿足條件,語句至少會被執行一次,當condition爲TRUE時,會退出循環,並執行END LOOP後的相應操作。當編寫基本循環時一定要包含EXIT語句,否則會陷入死循環。另外還應該定義循環控制變量,並且在循環體內修改循環控制變量的值。示例:
SQL> declare
2 i int:=1;
3 begin
4 loop
5 insert into testloop values(i);
6 exit when i=10;
7 i:=i+1;
8 end loop;
9 end;
10 /
2.WHILE循環
基本循環至少要執行一次循環體內的語句,而對於WHILE循環來說,只有條件爲TRUE時,纔會執行循環體內的語句。WHILE循環以WHILE …LOOP開始,以END LOOP結束。
WHILE condition LOOP
statement1;
statement2;
.....
END LOOP;
當condition爲TRUE時,執行循環體內的語句,而當condition爲FALSE或NULL時,會退出循環,並執行END LOOP後的語句。當使用WHILE循環時,應該定義循環控制變量,並在循環體內改變循環控制變量的值。示例:
SQL> declare
2 i int:=1;
3 begin
4 while i<=10 loop
5 insert into testloop values(i);
6 i:=i+1;
7 end loop;
8 end;
9 /
3.FOR循環
當使用基本循環或WHILE循環時,需要定義循環控制變量,並且循環控制變量不僅可以使用NUMBER類型,也可以使用其他數據類型。當使用FOR循環時,ORACLE會隱含定義循環控制變量。
FOR counter in [REVERSE] lower_bound. .upper_bound LOOP
statement1;
statement2;
.......
END LOOP;
counter是循環控制變量,並且該變量由oracle隱含定義,不需要顯式定義。lower_bound和upper_bound分別對應於循環控制變量的下界值和上界值,默認情況下,當使用FOR循環時,每次循環時循環控制變量會自動增1.如果指定REVERSE選項,那麼每次循環時循環控制變量會自動減1。示例:
SQL> begin
2 for i in reverse 1..10 loop
3 insert into testloop values(i);
4 end loop;
5 end;
4.嵌套循環和標號
嵌套循環是指在一個循環語句之中嵌入另一個循環語句,而標號(label)則用於標記嵌套塊或嵌套循環,通過在嵌套循環中使用標號,可以區分內層循環和外層循環,並且可以在內層循環中直接退出外層循環,在編寫時可以用<>定義標號。示例:
SQL> declare
2 result int;
3 begin
4 <<outer>>
5 for i in 1..100 loop
6 <<inter>>
7 for j in 1..100 loop
8 result:=i*j;
9 exit outer when result=1000;
10 exit when result=500;
11 end loop inter;
12 dbms_output.put_line(result);
13 end loop outer;
14 dbms_output.put_line(result);
15 end;
16 /
當執行以上PL/SQL塊時,如果result=1000,那麼直接退出外層循環,而result=500時只會退出內層循環。