Oracle循環語句


編寫循環控制結構時,用戶可以使用基本循環,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)則用於標記嵌套塊或嵌套循環,通過在嵌套循環中使用標號,可以區分內層循環和外層循環,並且可以在內層循環中直接退出外層循環,在編寫時可以用<<label_name>>定義標號。示例:

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時只會退出內層循環。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM