2016-12-10 46 views
-1

比方說,我有一個for循環如何,如果條件在循環中遇到退出過程PL SQL

for i in array.first .. array.last loop 
boolean := c(i) > d(i); 
if boolean --is true then 
exit the loop immediately and also exit the entire procedure 

else if the boolean is never true til the end of the loop, exit the loop 
and keep running other scripts in this procedure. 

我知道了「退出」的關鍵字必須在循環的內部,以退出循環如果條件得到滿足。而'返回'需要在循環之外,以退出程序。

但是如果我把'RETURN'放在循環的外面,那麼我認爲不管循環的結果是什麼,它會在循環結束時退出整個過程?

回答

0

如果你想成爲說教關於它,您應該使用EXIT退出循環,然後使用RETURN退出過程(複製任何必要的測試),因此遵循結構化編程規則,即「過程應該只有一個入口和一個出口」。在實踐中,99.999%的程序員只是將RETURN編碼到循環體內,因爲A)它更清楚發生了什麼(你不只是退出循環,而是從程序返回)和B )它更短。盡你所能。祝你好運。

+0

把循環內工作得很好。 – dozel

0

簡單的循環。這被稱爲簡單的原因:它只是簡單地用LOOP關鍵字開始,並以END LOOP語句結束。如果在循環體內執行EXIT,EXIT WHEN或RETURN(或引發異常),循環將終止。

See Oracle Magazine

+0

相同的鏈接說,它不好退出循環使用返回或退出... –

0

Tamás Kecskemétilink通過之後,唯一推薦的方法是使用一個while循環中,開始時自己指定所需的條件。

下面是從上面的鏈接摘錄:

Code Listing 5: A WHILE loop with one exit 

PROCEDURE display_multiple_years (
    start_year_in IN PLS_INTEGER 
, end_year_in  IN PLS_INTEGER) 
IS 
    l_current_year PLS_INTEGER := start_year_in; 
BEGIN 
    WHILE (l_current_year <= end_year_in 
     AND total_sales_for_year (l_current_year) > 0) 
    LOOP 
     display_total_sales_for_year (l_current_year); 
     l_current_year := l_current_year + 1; 
    END LOOP; 
END display_multiple_years; 
0

定義一個例外,當過要退出培養和處理異常

create procedure exit_loop_example as 
    exit_loop_exception exception; 
    begin 
/* previous code block */ 
begin 
    for i in 1..20 loop 
    raise exit_loop_exception; 
    end loop; 
    exception when 
    exit_loop_exception then 
    /* handle exit loop*/ 
    null; 
    end; 
/* next code block */ 
end;