阅读(3700) (0)

PL/SQL for循环

2021-08-30 16:42:22 更新

FOR LOOP语句是一种重复控制结构,可以有效地编写一个需要执行特定次数的循环。

语法

下面演示如何使用FOR LOOP语句 -

FOR counter IN initial_value .. final_value LOOP 
   sequence_of_statements; 
END LOOP;
SQL

以下是FOR循环中的控制流程 -

  • 首先执行初始步骤,只执行一次。 此步骤允许声明和初始化任何循环控制变量。
  • 接下来,评估条件,即initial_value .. final_value。如果结果为TRUE,则执行循环的主体。如果结果为FALSE,则循环主体不执行,并且控制流程跳转到for循环之后的下一个语句。
  • 执行for循环的主体后,增加或减少计数器变量的值。
  • 现在再次评估条件。 如果计算为TRUE,则执行循环并且该过程重复(循环体,然后增量步,然后再次调节)。 条件变为FALSE后,FOR-LOOP终止。

以下是PL/SQL for循环的一些特殊特性 -

  • 循环变量或计数器的initial_value和final_value可以是文字,变量或表达式,但必须对数字求值。 否则,PL/SQL引发预定义的异常VALUE_ERROR。
  • initial_value不必为1; 但是,循环计数器增量(或减量)必须为1。
  • PL/SQL允许在运行时动态地确定循环范围。

示例

以下示例演示如何使用for循环 -

SET SERVEROUTPUT ON SIZE 100000;
DECLARE 
   a number(2); 
BEGIN 
   FOR a in 10 .. 20 LOOP 
      dbms_output.put_line('value of a: ' || a); 
  END LOOP; 
END; 
/
SQL

当上述代码在SQL提示符下执行时,它会产生以下结果 -


反转FOR LOOP语句

默认情况下,迭代从初始值到最终值,通常从下限到上限。但是也可以使用REVERSE关键字来反转这个顺序。 在这种情况下,迭代以另一种方式进行。每次迭代后,循环计数器递减。

但是,必须以升序(不降序)顺序写入范围界限。 以下程序说明了这一点 -

SET SERVEROUTPUT ON SIZE 100000;
DECLARE 
   a number(2) ; 
BEGIN 
   FOR a IN REVERSE 10 .. 20 LOOP 
      dbms_output.put_line('value of a: ' || a); 
   END LOOP; 
END; 
/
SQL

当上述代码在SQL提示符下执行时,它会产生以下结果 -