Oracle从新手到高手
上QQ阅读APP看书,第一时间看更新

6.3 循环语句

循环语句可以控制程序多次重复地执行某一组语句。在PL/SQL中,常用的循环语句有3种类型,即LOOP循环、WHILE循环和FOR循环。在这几种基本循环的基础上又可以演变出许多嵌套循环控制,本节将介绍最基本的循环控制语句。

6.3.1 LOOP…END LOOP循环

LOOP循环也是最基本的循环,也称为“无条件的循环”。在这种类型的循环中,如果没有指定EXIT语句,循环将一直运行,即出现死循环,死循环是应该尽量避免的。因此,在LOOP循环中必须指定EXIT语句,以便循环停止执行。

LOOP循环的语法格式如下:

      loop
         statements;
         exit when condition
      end loop;

在循环的第n次重复或迭代过程中,都要检查退出条件表达式是否为真。如果表达式为真,则它会跳过EXIT后的所有语句,并跳到代码中END LOOP后的第一个语句。如果开始就满足了WHEN所给出的条件,LOOP和EXIT之间的语句只会被执行一次,但如果没有WHEN条件语句,则循环会一直执行,这种情况应该尽量避免。

例如,下面的循环语句将依次执行输出1~10的平方数。

在上面的程序块中,每一次循环均将变量I加1,当加到10时,满足循环出口条件终止循环。

6.3.2 WHILE循环

另一种循环类型是WHILE循环,它适用于事先无法知道控制循环终止变量值的情况。与LOOP循环的不同之处在于,WHILE循环在循环的顶部包括了判断条件,这样在每次执行循环时,都将判断该条件。如果判断条件为TRUE,那么循环将继续执行。如果判断条件为FALSE,那么循环将会停止。

WHILE循环的语法结构如下:

      while condition
      loop
         statements;
      end loop;

在执行WHILE循环时,首先会检查判断条件,如果判断条件开始就是FALSE,程序将直接执行END LOOP后面的语句,该项循环将一次都不执行。如果判断条件为TRUE,则执行循环体内的语句,然后再检查判断条件。

在下面的程序块中,将使用WHILE循环打印50以内能被3整除的整数。

只有当条件满足时,WHILE循环体才会被执行。

6.3.3 FOR循环

在上面的WHILE循环中,为了防止出现死循环,需要在循环内不断修改判断条件。而FOR循环则使用一个循环记数器,并通过它来控制循环执行的次数。该计数器可以从小到大进行记录,也可以相反,从大到小进行记录。如果不满足循环条件,则终止循环。FOR循环的语法结构如下:

      for loop_variable_name in [reverse] lower_bound…upper_bound
      loop
         statements;
      end loop

在上面的语法中,LOOP_VARIABLE_NAME参数指定循环记数器,在这里既可以使用已有的变量,也可以使用一个新的变量。循环记数器按照步长以1递增,当使用关键字REVERSE时表示递减。LOWER_BOUND和UPPER_BOUND则指定了循环记数器的上限和下限。

下面的程序通过FOR循环计算1~100的整数之和。

在上面的程序中,循环记数器I不需要在DECLARE部定义,它属于FOR循环的一部分。控制记数器I的取值将从1~100依次加1,这样明确了循环的执行次数。

提示:

在FOR循环中的循环记数器只能在循环体内使用。

当使用关键字REVERSE时,循环记数器将自动减1,并强制记数器的取值从上限值到下限值。下面的程序将打印1~20之间能被3整除的数。