Oracle 迴圈語句

2021-06-16 20:02:00 字數 2001 閱讀 7643

在pl/sql中最簡單格式的迴圈語句是基本迴圈語句,這種迴圈語句以loop開始,以end loop結束,其語法如下: 

loop 

statement1;

...exit [when condition];

注意:當編寫基本迴圈時,一定要包含exit語句,否則pl/sql會陷入死迴圈。

create table temp(cola int);

declare

i int :=1;

begin

loop

insert into temp values(i);

exit when i=10;

i:=i+1;

end loop;

end;

基本迴圈至少要執行一次迴圈體內的語句,而對於while迴圈來說,只有條件為true時,才會執行迴圈體內的語句。while迴圈以while....loop開始,以end  loop 結束,其語法如下:

while condition loop

statement1;

statement2;

...end loop;

下面是使用while迴圈的例子

declare 

i int :=1;

begin

while i<=10 loop

insert into temp values(1);

i:=i+1;

end loop;

end;

當使用基本迴圈或while迴圈時,需要定義迴圈控制變臉,並且迴圈控制變數不僅可以使用number型別,也可以使用其它資料型別;而當使用for迴圈時,oracle會隱含定義迴圈控制變數。for迴圈的語法如下:

----for迴圈的語法格式

for counter in [reverse]

lower_bound .. upper_bound loop

statement1;

statement2;

...end loop;

如上所示,counter是迴圈控制變數,並且該變數由oracle隱含定義,不需要顯示定義:lower_bound和upper_bound分別對應於迴圈控制變數的上界值和下界值。預設情況下,當使用for迴圈時,每次迴圈時,迴圈控制變數會自動增一;如果指定reverse,那麼每次迴圈時,迴圈控制變數會自動減一。使用for迴圈的示例如下:

begin	  

for i in reverse 1 .. 10 loop

insert into temp values(i);

end loop;

end;

如上所示,當執行以上pl/sql塊時,會為temp表插入10條記錄。因為指定了reverse選項,所以被插入資料的順序為10,9...,1。

巢狀迴圈是指在乙個迴圈語句之中,嵌入另乙個迴圈語句,而標號(label)則用於標記巢狀塊或巢狀迴圈。通過在巢狀迴圈中使用標號,可以區分內層迴圈和外層迴圈並且可以在記憶體迴圈中直接退出外層迴圈.在編寫pl/sql塊時,可以使用<>定義標號,示例如下:

declare 

result int;

begin

<>

for i in 1..100 loop

<>

for j in 1..100 loop

result:=i*j;

exit outer1 when result=1000;

exit when result=500;

end loop inner1;

dbms_output.put_line('outer=='||result);

end loop outer1;

dbms_output.put_line(result);

end;

Oracle迴圈語句

1,當不確定多少次要執行迴圈體並且希望迴圈體至少執行一次,則會使用loop語句 loop 執行每個通過迴圈的 語句 end loop 例項 loop week day 7 exit when week 21 end loop 此時當week值大於21時終止,可以使用exit語句或當遇到exit wh...

oracle 迴圈語句

1.基本迴圈 至少會執行一次 declare i int 1 begin loop 迴圈開始 dbms output.put line value i exit when i 10 退出迴圈條件 i i 1 迴圈監視變數 end loop 迴圈結束 end 2.while迴圈 只有滿足while新增...

oracle學習 迴圈語句

loop迴圈 create or replace procedure pro test loop is i number begin i 0 loop i i 1 dbms output.put line i if i 5 then exit end if end loop end pro test...