如果在循环PL SQL中满足条件,如何退出过程

时间:2016-12-10 15:29:44

标签: sql oracle loops plsql procedure

假设我有一个for循环

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.

我知道'EXIT'关键字需要在循环内部,以便在满足条件时退出循环。并且'RETURN'需要在循环之外,退出程序。

但是如果我把'RETURN'放在循环之外,那么我认为无论循环结果是什么,它都会在循环结束时退出整个过程?

4 个答案:

答案 0 :(得分:1)

如果你想要它的教学,你应该使用EXIT退出循环,然后使用RETURN退出程序(复制任何必要的测试),从而遵循结构化编程规则“A程序应该只有一个入口和一个出口“。在实践中,99.999%的程序员只是在循环体内编写RETURN代码,因为A)它更清楚的是发生了什么(你不只是离开循环,你从程序返回),和B )它更短。照你的意愿去做。祝你好运。

答案 1 :(得分:0)

简单的循环。它之所以被称为简单原因:它只是用LOOP关键字开始,以END LOOP语句结束。如果在循环体内执行EXIT,EXIT WHEN或RETURN(或者如果引发异常),循环将终止。

See Oracle Magazine

答案 2 :(得分:0)

完成Tamás Kecskeméti link之后,唯一推荐的方法是使用一个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;

答案 3 :(得分:0)

定义一个异常,当你想要退出raise并以

处理异常时
    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;