1. 程式人生 > >oracle 迴圈語句總結(break&continue)

oracle 迴圈語句總結(break&continue)

主要有以下五種迴圈:Exit When、Loop、While、For(普通迴圈)、For(遊標迴圈),下面舉例一一說明(均為儲存過程)。


1、Exit When迴圈:

原始碼複製列印關於
  1. createorreplaceprocedure proc_test_exit_when is
  2. i number;   
  3. begin
  4. i:=0;   
  5. LOOP   
  6. Exit When(i>5);   
  7. Dbms_Output.put_line(i);   
  8. i:=i+1;   
  9. END LOOP;   
  10. end proc_test_exit_when;  
create or replace procedure proc_test_exit_when is
i number;
begin
i:=0;
LOOP
Exit When(i>5);
Dbms_Output.put_line(i);
i:=i+1;
END LOOP;
end proc_test_exit_when;

2、Loop迴圈:

原始碼複製列印關於
  1. createorreplaceprocedure proc_test_loop is
  2. i number;   
  3. begin
  4. i:=0;   
  5. loop   
  6. i:=i+1;   
  7. dbms_output.put_line(i);   
  8. if i>5 then
  9. exit;   
  10. end if;   
  11. end loop;   
  12. end proc_test_loop;  
create or replace procedure proc_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 proc_test_loop;

3、While迴圈:

原始碼複製列印關於
  1. createorreplaceprocedure proc_test_while is
  2. i number;   
  3. begin
  4. i:=0;   
  5. while i<5 loop   
  6. i:=i+1;   
  7. dbms_output.put_line(i);   
  8. end loop;   
  9. end proc_test_while;  
create or replace procedure proc_test_while is
i number;
begin
i:=0;
while i<5 loop
i:=i+1;
dbms_output.put_line(i);
end loop;
end proc_test_while;

4、For普通迴圈:

原始碼複製列印關於
  1. createorreplaceprocedure proc_test_for is
  2. i number;   
  3. begin
  4. i:=0;   
  5. for i in 1..5 loop   
  6. dbms_output.put_line(i);   
  7. end loop;   
  8. end proc_test_for;  
create or replace procedure proc_test_for is
i number;
begin
i:=0;
for i in 1..5 loop
dbms_output.put_line(i);
end loop;
end proc_test_for;

5、For遊標迴圈:

原始碼複製列印關於
  1. createorreplaceprocedure proc_test_cursor is
  2. userRow test%rowtype;   
  3. cursor userRows is
  4. select * from test;   
  5. begin
  6. for userRow in userRows loop   
  7. dbms_output.put_line(userRow.id||','||userRow.Name||','||userRows%rowcount);   
  8. end loop;   
  9. end proc_test_cursor;  
create or replace procedure proc_test_cursor is
userRow test%rowtype;
cursor userRows is
select * from test;
begin
for userRow in userRows loop
dbms_output.put_line(userRow.id||','||userRow.Name||','||userRows%rowcount);
end loop;
end proc_test_cursor;

上面所示為儲存過程相應程式碼,你可以通過如下方式進行測試:

進入pl/sql, 執行 檔案->新建->程式視窗->空白,拷貝以上各段程式碼,到pl/sql空白視窗中,安F8執行編譯。

再 執行 檔案->新建->命令視窗 進入命令視窗 執行一下  set serveroutput on 這句程式碼,然後,輸入exec 相應儲存過程,ok。

第5中迴圈 要求新建一個名為test的表 欄位 id、name,插入幾條資料,進行測試即可。

 ========

不能。無break和continue的語法。  
  break可用exit代替。  
  loop  
      ...  
      exit   when   ...;  
      ...  
  end   loop;      
  continue和用自定義異常代替。  
  loop  
      begin  
          ...  
          raise   my_ex;  
          ...  
      exception  
          when   others   then   null;  
      end;  
  end   loop;  

 exit when是跳出整個迴圈,不是跳出本輪迴圈。相當於C的break。

BEGIN
<<OUTER>>
FOR I IN 1 .. 10 LOOP
<<INNER>>
FOR  J IN 1..20 LOOP
     DBMS_OUTPUT.PUT_LINE('J IS :'|| J);
     EXIT WHEN J = 10;
END LOOP INNER;
   DBMS_OUTPUT.PUT_LINE('I IS:'||I);
  EXIT WHEN I = 5;
END LOOP OUTER;

END;