1.先看exit和return
將exit 或是 return 用在loop 。。。。end loop;中都可以中斷循環,但是它們有一個很明顯的不同
看下面兩個例子:
例一:
create or replace package body cux_test is procedure main is l_count number; l_test number:=6; begin dbms_output.put_line('開始循環'); for l_count in 1..10 loop if l_test=l_count then dbms_output.put_line('滿足條件,退出循環'); return; else dbms_output.put_line('繼續循環'); end if; end loop; dbms_output.put_line('結束程序'); end ; end cux_test;
例二:
create or replace package body cux_test is procedure main is l_count number; l_test number:=6; begin dbms_output.put_line('開始循環'); for l_count in 1..10 loop if l_test=l_count then dbms_output.put_line('滿足條件,退出循環'); exit;--exit when x>=8;可以加條件 else dbms_output.put_line('繼續循環'); end if; end loop; dbms_output.put_line('結束程序'); end ; end cux_test;
下面來看以上兩個例子的執行結果:
例一:
開始循環
繼續循環
繼續循環
繼續循環
繼續循環
繼續循環
滿足條件,退出循環
例二:
開始循環
繼續循環
繼續循環
繼續循環
繼續循環
繼續循環
滿足條件,退出循環
結束程序
以上的例子說明了一個問題,exit只是單純的結束循環,但還會繼續執行程序包中其他的內容,而return則是直接中斷整個程序。
2.continue的作用是終止本次循環,開始下一次循環,它不是跳出循環。
而oracle數據庫之前卻一直沒有支持continue語法,直到oracle11g加入了continue語法,
其功能也是終止本次循環,開始下一次循環,exit語法的作用是跳出並結束循環。
begin for i in 1 .. 20 loop if i < 10 then continue; end if; dbms_output.put_line(i); end loop; end;
結果:
10 11 12 13 14 15 16 17 18 19 20
當i等於1到9的時候,程序運行到continue,使得當前循環停止,開始下一次循環,當i等於10的時候,不會執行到continue,所以從10開始輸出。