使用LOOP、EXIT、CONTINUE、WHILE、FOR和FOREACH语句,可以使PL/SQL函数重复执行一系列命令。
(1)LOOP。
语法格式如下。
说明如下。
①LOOP定义一个无条件的循环,它会无限重复,直到被EXIT或RETURN语句终止。
②可选的label可以被EXIT和CONTINUE语句用在嵌套循环中,指定这些语句引用的是哪一层循环。
(2)EXIT。
语法格式如下。
说明如下。
①如果没有给出label,那么最内层的循环会被终止,然后END LOOP后面的语句会被执行。如果给出了label,那么它必须是当前或更高层的嵌套循环或语句块的标签。然后该命名循环或块就会被终止,并且控制会转移到该循环/块相应的END之后的语句上。
②如果指定了WHEN,只有boolean-expression为true时才会发生循环退出。否则,控制会转移到EXIT之后的语句。
③EXIT可以被用在所有类型的循环中,它并不限于在无条件循环中使用。
④在和BEGIN块一起使用时,EXIT会把控制权交给块结束后的下一个语句。
(3)CONTINUE。
语法格式如下。
说明如下。
①如果没有给出label,最内层循环的下一次迭代会开始,即循环体中剩余的所有语句将被跳过,并且控制返回到循环控制表达式(如果有),以决定是否需要另一次循环迭代。如果label存在,它指定应该继续执行的循环标签。
②如果指定了WHEN,该循环的下一次迭代只有在boolean-expression为真时才会开始。否则,控制会传递给CONTINUE后面的语句。
③CONTINUE可以被用在所有类型的循环中,它并不限于在无条件循环中使用。
(4)WHILE。
语法格式如下。
说明如下。
只要boolean-expression被计算为true,WHILE语句就会重复一个语句序列。每次进入到循环体之前都会检查该表达式。
(5)FOR。
语法格式如下。
说明如下。
①FOR循环在给定整数范围内迭代。
②变量name自动定义为类型integer,并且只在循环内存在(任何该变量名的现有定义在此循环内都将被忽略)。
③给出范围上下界的两个表达式在进入循环的时候计算一次。
④如果下界大于上界(或在REVERSE情况下相反),循环体根本不会被执行。而且不会抛出任何错误。
⑤如果没有指定BY子句,迭代步长为1,否则步长是BY中指定的值,该值也只在循环进入时计算一次。
⑥如果指定了REVERSE,那么每次迭代后步长值会被减除,而不是增加。
⑦如果一个label被附加到FOR循环,那么整数循环变量可以用label的限定名引用。
示例2.13: 使用while loop、continue语句和exit语句输出11~19,跳过15,当等于19时跳出循环。
程序代码如下。
程序运行结果如下。